# Business Logic — DKW01302SFLogic.setList() [113 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.DKW01302SF.DKW01302SFLogic` |
| Layer | Controller (Web view logic) |
| Module | `DKW01302SF` (Package: `eo.web.webview.DKW01302SF`) |

## 1. Role

### DKW01302SFLogic.setList()

This method prepares the **shelf move entry detail list** (`棚移動入荷詳細`, shelf move entry details) for display on the web screen. It is invoked during the screen rendering phase of the DKW01302 "Shelf Move Entry Details" screen (棚移動入荷詳細画面) and is responsible for enriching each row of the detail list with display-oriented metadata that the frontend layer requires to render the table correctly.

The method performs four categories of row-level enrichment: (1) alternating row background colors ("even" / "odd") for visual striping, (2) sequential row numbering (1-based), (3) model number and product name consolidation — resolving which of three possible device types (indoor device, indoor device set, accessory) carries the model code and name for each row, and (4) serial number / movement reason / movement count / remarks extraction based on a designation method code.

The method implements a **bulk preparation / enrichment pattern**: it iterates over a list of detail beans and applies a deterministic transformation pipeline to each row, then writes aggregate metadata (total item count) back to the service form bean so the screen can render pagination controls. This is a shared view-layer utility called exclusively by the screen's main processing method (`setGamen`), and it performs no database or SC-level reads/writes — all data comes from already-populated beans passed in as parameters.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["setList(paramBean, serviceFormBean)"])
    START --> GET_LIST["Get SHOSAI_LIST from paramBean"]
    GET_LIST --> FOR_START["for i = 0 to shosaiList.getCount()-1"]
    FOR_START --> GET_DATA["getDataBean(i) -> subbean"]
    GET_DATA --> CHECK_ODD{i % 2 == 1?}
    CHECK_ODD -->|Yes| SET_EVEN["SET L_COLOR_01 = even"]
    CHECK_ODD -->|No| SET_ODD["SET L_COLOR_01 = odd"]
    SET_EVEN --> SET_NO["SET L_NO_01 = String.valueOf(i + 1)"]
    SET_ODD --> SET_NO
    SET_NO --> INIT_VAR["Initialize mdlNo and shohinNm to empty"]
    INIT_VAR --> GET_MDL_CD["GET takunaiCd from subbean"]
    GET_MDL_CD --> GET_SETC["GET setCd from subbean"]
    GET_SETC --> GET_HUZOKU["GET huzokuCd from subbean"]
    GET_HUZOKU --> CHECK_TAKU{takunaiCd not null?}
    CHECK_TAKU -->|Yes| SET_TAKU["mdlNo = takunaiCd, shohinNm = L_TKKIKI_MDL_NM_01"]
    CHECK_TAKU -->|No| CHECK_SET{setCd not null?}
    CHECK_SET -->|Yes| SET_SET["mdlNo = setCd, shohinNm = L_TKKIKI_SETHIN_MDL_NM_01"]
    CHECK_SET -->|No| CHECK_HUZOKU{huzokuCd not null?}
    CHECK_HUZOKU -->|Yes| SET_HUZOKU["mdlNo = huzokuCd, shohinNm = L_HUZOKUHIN_MDL_NM_01"]
    CHECK_HUZOKU -->|No| SET_EMPTY["mdlNo empty, shohinNm empty"]
    SET_TAKU --> SET_MDL_NO["SET L_MDL_NO_01 = mdlNo"]
    SET_SET --> SET_MDL_NO
    SET_HUZOKU --> SET_MDL_NO
    SET_EMPTY --> SET_MDL_NO
    SET_MDL_NO --> TRUNCATE_NM["SET L_SHOHIN_NM_01 = substr(shohinNm, 0, 20)"]
    TRUNCATE_NM --> SET_FULL_NM["SET L_SHOHIN_NM_DISP_01 = shohinNm"]
    SET_FULL_NM --> INIT_MOVE["Initialize shiteiCd, seizoNo, riyu, sjiCnt, mvCnt, biko"]
    INIT_MOVE --> GET_SHITEI["GET shiteiCd from subbean"]
    GET_SHITEI --> CHECK_SHITEI{shiteiCd equals 2?}
    CHECK_SHITEI -->|Yes - Serial number specified| GET_SERIAL["GET kikiSeizoNm, setSeizoNm"]
    GET_SERIAL --> CHECK_KIKI{kikiSeizoNm not null?}
    CHECK_KIKI -->|Yes| SET_KIKI["seizoNo = kikiSeizoNm"]
    CHECK_KIKI -->|No| CHECK_SET_SEIZO{setSeizoNm not null?}
    CHECK_SET_SEIZO -->|Yes| SET_SET_SEIZO["seizoNo = setSeizoNm"]
    CHECK_SET_SEIZO -->|No| SET_SEIZO_EMPTY["seizoNo empty"]
    SET_KIKI --> SET_MOVE_RSN["riyu = L_ARI_MV_RSN_01, sjiCnt = 1, mvCnt = 1, biko = L_ARI_BIKO_01"]
    SET_SET_SEIZO --> SET_MOVE_RSN
    SET_SEIZO_EMPTY --> SET_MOVE_RSN
    SET_MOVE_RSN --> GET_NON_SERIAL["GET riyu, sjiCnt, mvCnt, biko"]
    CHECK_SHITEI -->|No - Other designation| GET_NON_SERIAL
    GET_NON_SERIAL --> CHECK_MV_CNT{mvCnt null?}
    CHECK_MV_CNT -->|Yes| SET_MV_DEFAULT["mvCnt = 0"]
    CHECK_MV_CNT -->|No| SKIP_DEFAULT["skip"]
    SET_MV_DEFAULT --> CHECK_MV_EQ{sjiCnt equals mvCnt?}
    SKIP_DEFAULT --> CHECK_MV_EQ
    CHECK_MV_EQ -->|Yes| SET_MV_TARGET["SET L_MV_TARGET_01 = true"]
    CHECK_MV_EQ -->|No| SKIP_TARGET["skip"]
    SET_MV_TARGET --> SET_MV_CNT["SET L_MV_CNT_01 = mvCnt"]
    SKIP_TARGET --> SET_MV_CNT
    SET_MV_CNT --> TRUNCATE_BIKO["SET L_BIKO_01 = substr(biko, 0, 10)"]
    TRUNCATE_BIKO --> SET_BIKO_DISP["SET L_BIKO_DISP_01 = biko"]
    SET_BIKO_DISP --> FOR_NEXT["i++"]
    FOR_NEXT --> FOR_CHECK{i less than count}
    FOR_CHECK -->|Yes| GET_DATA
    FOR_CHECK -->|No| SET_DISP_COUNT["SET serviceFormBean DISP_COUNT = shosaiList.getCount()"]
    SET_DISP_COUNT --> END_NODE(["return"])
```

**CRITICAL — Constant Resolution:**
- `SHOSAI_LIST` = "棚移動入荷詳細" (Shelf Move Entry Details List) — the bean array key for detail row data.
- `L_COLOR_01` = "背景色" (Background Color) — used to assign alternating row stripe values.
- `L_NO_01` = "項番" (Row Number) — 1-based sequential row index.
- `L_TKKIKI_MDL_CD_01` = "宅内機器型式コード" (Indoor Device Model Code) — primary model code.
- `L_TKKIKI_SETHIN_MDL_CD_01` = "宅内機器セット品型式コード" (Indoor Device Set Model Code) — fallback model code.
- `L_HUZOKUHIN_MDL_CD_01` = "付属品型式コード" (Accessory Model Code) — tertiary fallback model code.
- `L_SHITEI_WAY_CD_01` = "指定方法" (Designation Method) — code "2" means serial number specification (製番指定).
- `DISP_COUNT` = "一覧表示件数" (List Display Count) — total number of detail items.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `paramBean` | `X31SDataBeanAccess` | The request-side data bean carrying the shelf move entry detail list (`SHOSAI_LIST` / 棚移動入荷詳細). Contains an array of detail sub-beans, each representing one line item in the shelf move entry with fields such as model codes, serial numbers, movement reasons, and remarks. The list is populated by prior screen processing. |
| 2 | `serviceFormBean` | `X31SDataBeanAccess` | The response-side (form) data bean used to write back display metadata to the screen. After processing, `setList` writes the total item count (`DISP_COUNT` / 一覧表示件数) into this bean so the view layer knows how many rows to render. |

**Instance fields / external state read:**

| Name | Type | Business Description |
|------|------|---------------------|
| `SHOSAI_LIST` | `static final String` | Constant key "棚移動入荷詳細" (Shelf Move Entry Details List) identifying the detail data bean array within `paramBean`. |
| `L_COLOR_01` | `static final String` | Constant key "背景色" (Background Color) — used for row stripe assignment. |
| `L_NO_01` | `static final String` | Constant key "項番" (Row Number). |
| `L_TKKIKI_MDL_CD_01` | `static final String` | Constant key "宅内機器型式コード" (Indoor Device Model Code). |
| `L_TKKIKI_SETHIN_MDL_CD_01` | `static final String` | Constant key "宅内機器セット品型式コード" (Indoor Device Set Model Code). |
| `L_HUZOKUHIN_MDL_CD_01` | `static final String` | Constant key "付属品型式コード" (Accessory Model Code). |
| `L_TKKIKI_MDL_NM_01` | `static final String` | Constant key "宅内機器型式名" (Indoor Device Model Name). |
| `L_TKKIKI_SETHIN_MDL_NM_01` | `static final String` | Constant key "宅内機器セット品型式名" (Indoor Device Set Model Name). |
| `L_HUZOKUHIN_MDL_NM_01` | `static final String` | Constant key "付属品型式名" (Accessory Model Name). |
| `L_MDL_NO_01` | `static final String` | Constant key "型番" (Model Number). |
| `L_SHOHIN_NM_01` | `static final String` | Constant key "商品名" (Product Name). |
| `L_SHOHIN_NM_DISP_01` | `static final String` | Constant key "商品名（ツールチップ用）" (Product Name for Tooltip). |
| `L_SHITEI_WAY_CD_01` | `static final String` | Constant key "指定方法" (Designation Method). |
| `L_KIKI_SEIZO_NO_01` | `static final String` | Constant key "機器製造番号" (Device Serial Number). |
| `L_TKKIKI_SETHIN_SEIZO_NO_01` | `static final String` | Constant key "宅内機器セット品製造番号" (Indoor Device Set Serial Number). |
| `L_SEIZO_NO_01` | `static final String` | Constant key "製造番号" (Serial Number). |
| `L_ARI_MV_RSN_01` | `static final String` | Constant key "移動理由コード名称（対象機器あり）" (Movement Reason Code Name — with target device). |
| `L_NASI_MV_RSN_01` | `static final String` | Constant key "移動理由コード名称（対象機器なし）" (Movement Reason Code Name — without target device). |
| `L_MV_RSN_01` | `static final String` | Constant key "移動理由コード名称" (Movement Reason Code Name). |
| `L_SJI_CNT_01` | `static final String` | Constant key "指示数" (Designated Count). |
| `L_MV_TARGET_01` | `static final String` | Constant key "移動対象" (Movement Target). |
| `L_MV_CNT_01` | `static final String` | Constant key "移動数" (Movement Count). |
| `L_ARI_BIKO_01` | `static final String` | Constant key "備考（対象機器あり）" (Remarks — with target device). |
| `L_NASI_BIKO_01` | `static final String` | Constant key "備考（対象機器なし）" (Remarks — without target device). |
| `L_BIKO_01` | `static final String` | Constant key "備考" (Remarks). |
| `L_BIKO_DISP_01` | `static final String` | Constant key "備考（ツールチップ用）" (Remarks for Tooltip). |
| `DISP_COUNT` | `static final String` | Constant key "一覧表示件数" (List Display Count). |

## 4. CRUD Operations / Called Services

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

No database or SC-level CRUD operations are performed by this method. All data reads and writes occur through the in-memory bean layer (`X31SDataBeanAccess` / `X31SDataBeanAccessArray`). The called methods are pure data access and string utility operations:

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `paramBean.getDataBeanArray(SHOSAI_LIST)` | (bean layer) | (in-memory SHOSAI_LIST bean) | Retrieves the shelf move entry detail list array from the request bean. |
| R | `OneStopDataBeanAccessArray.getCount` | (bean layer) | (in-memory array) | Returns the total number of detail rows in the list. |
| R | `OneStopDataBeanAccessArray.getDataBean` | (bean layer) | (in-memory array) | Retrieves the detail sub-bean at a given index for processing. |
| R | `OneStopDataBeanAccess.sendMessageString(String, GET_VALUE)` | (bean layer) | (in-memory sub-bean field) | Reads a field value from the sub-bean (model code, serial number, etc.). |
| W | `OneStopDataBeanAccess.sendMessageString(String, SET_VALUE)` | (bean layer) | (in-memory sub-bean field) | Writes a processed field value back to the sub-bean (model number, product name, serial number, etc.). |
| W | `OneStopDataBeanAccess.sendMessageBoolean(String, SET_VALUE)` | (bean layer) | (in-memory sub-bean field) | Writes the movement target flag to the sub-bean. |
| W | `OneStopDataBeanAccess.sendMessageString(String, SET_VALUE)` | (bean layer) | (in-memory serviceFormBean) | Writes the total item count (`DISP_COUNT`) to the form bean for screen display. |
| - | `JDKCommonUtil.isNull(String)` | JDKCommonUtil | - | Null-check utility on string values (model codes, serial numbers, movement count). |
| - | `JDKWebCommon.substr(String, int, int)` | JDKWebCommon | - | String truncation utility for product name (20 chars) and remarks (10 chars). |
| - | `String.valueOf(int)` | (Java stdlib) | - | Converts integer index to display row number string. |

## 5. Dependency Trace

No screen/batch entry points found within 8 hops. Direct callers found: 1 method.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | DKW01302SFLogic.setGamen | `DKW01302SFLogic.setGamen` -> `DKW01302SFLogic.setList` | Bean read/write to SHOSAI_LIST (in-memory), DISP_COUNT written to serviceFormBean |

The method is called by `setGamen()` within the same class (`DKW01302SFLogic`). `setGamen` is the screen's main display processing method for the "Shelf Move Entry Details" screen. `setList` is invoked to enrich the detail list data before the screen is rendered. No further database or external service calls are made beyond bean operations.

## 6. Per-Branch Detail Blocks

**Block 1** — [PROCESS] (initialize) `(L816)`

> Retrieve the detail list array from paramBean and begin iterating over rows.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `shosaiList = paramBean.getDataBeanArray(SHOSAI_LIST)` // Retrieve SHOSAI_LIST (棚移動入荷詳細) array [-> SHOSAI_LIST="棚移動入荷詳細"] |

**Block 2** — [FOR] `(L818)`

> Loop over each detail row: `for (int i = 0; i < shosaiList.getCount(); i++)`

**Block 2.1** — [PROCESS] `(L819)`

> Get the detail sub-bean at index i for row-level processing.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `subbean = shosaiList.getDataBean(i)` // Get detail row bean |

**Block 2.2** — [IF/ELSE] (background color setting — 背景色の設定) `(L821)` `[i % 2 == 1]`

> Alternate row background color for visual striping in the display table. Odd-indexed rows get "even" (CSS class for even stripes), even-indexed rows get "odd".

| # | Type | Code |
|---|------|------|
| 1 | SET | Check `i % 2 == 1` |
| 2 | EXEC | Branch: `subbean.sendMessageString(L_COLOR_01, X31CWebConst.DATABEAN_SET_VALUE, "even")` // Odd row → assign "even" [-> L_COLOR_01="背景色"] |
| 3 | EXEC | Else: `subbean.sendMessageString(L_COLOR_01, X31CWebConst.DATABEAN_SET_VALUE, "odd")` // Even row → assign "odd" [-> L_COLOR_01="背景色"] |

**Block 2.3** — [PROCESS] (row number setting — 項番の設定) `(L828)`

> Set the 1-based row number for display.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `subbean.sendMessageString(L_NO_01, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(i + 1))` // 1-based row index [-> L_NO_01="項番"] |

**Block 2.4** — [PROCESS] (model number and product name setup — 型番、商品名の設定) `(L830)`

> Extract model code and product name from one of three possible device types (indoor device, indoor device set, accessory), using a priority order.

| # | Type | Code |
|---|------|------|
| 1 | SET | `mdlNo = ""` // Initialize model number |
| 2 | SET | `shohinNm = ""` // Initialize product name |
| 3 | CALL | `takunaiCd = subbean.sendMessageString(L_TKKIKI_MDL_CD_01, X31CWebConst.DATABEAN_GET_VALUE)` // GET indoor device model code [-> L_TKKIKI_MDL_CD_01="宅内機器型式コード"] |
| 4 | CALL | `setCd = subbean.sendMessageString(L_TKKIKI_SETHIN_MDL_CD_01, X31CWebConst.DATABEAN_GET_VALUE)` // GET indoor device set model code [-> L_TKKIKI_SETHIN_MDL_CD_01="宅内機器セット品型式コード"] |
| 5 | CALL | `huzokuCd = subbean.sendMessageString(L_HUZOKUHIN_MDL_CD_01, X31CWebConst.DATABEAN_GET_VALUE)` // GET accessory model code [-> L_HUZOKUHIN_MDL_CD_01="付属品型式コード"] |

**Block 2.5** — [IF/ELSE-IF/ELSE] (model code resolution — 優先順で機種コードを決定) `(L833)`

> Priority resolution: if the indoor device model code exists, use it; otherwise check the indoor device set model code; otherwise check the accessory model code. Each branch also fetches the corresponding model name.

| # | Type | Code |
|---|------|------|
| 1 | SET | Check `!JDKCommonUtil.isNull(takunaiCd)` |
| 2 | SET | Branch 1: `mdlNo = takunaiCd` // Use indoor device model code |
| 3 | CALL | `shohinNm = subbean.sendMessageString(L_TKKIKI_MDL_NM_01, X31CWebConst.DATABEAN_GET_VALUE)` // GET indoor device model name [-> L_TKKIKI_MDL_NM_01="宅内機器型式名"] |
| 4 | SET | Else-If: `!JDKCommonUtil.isNull(setCd)` |
| 5 | SET | Branch 2: `mdlNo = setCd` // Use indoor device set model code |
| 6 | CALL | `shohinNm = subbean.sendMessageString(L_TKKIKI_SETHIN_MDL_NM_01, X31CWebConst.DATABEAN_GET_VALUE)` // GET indoor device set model name [-> L_TKKIKI_SETHIN_MDL_NM_01="宅内機器セット品型式名"] |
| 7 | SET | Else-If: `!JDKCommonUtil.isNull(huzokuCd)` |
| 8 | SET | Branch 3: `mdlNo = huzokuCd` // Use accessory model code |
| 9 | CALL | `shohinNm = subbean.sendMessageString(L_HUZOKUHIN_MDL_NM_01, X31CWebConst.DATABEAN_GET_VALUE)` // GET accessory model name [-> L_HUZOKUHIN_MDL_NM_01="付属品型式名"] |
| 10 | SET | Else: `mdlNo` and `shohinNm` remain empty strings |

**Block 2.6** — [PROCESS] (write model number) `(L843)`

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `subbean.sendMessageString(L_MDL_NO_01, X31CWebConst.DATABEAN_SET_VALUE, mdlNo)` // Write resolved model number [-> L_MDL_NO_01="型番"] |

**Block 2.7** — [PROCESS] (product name with truncation — 商品名20文字) `(L845)`

> Write the product name truncated to 20 characters for display, and the full product name for tooltip display.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `subbean.sendMessageString(L_SHOHIN_NM_01, X31CWebConst.DATABEAN_SET_VALUE, JDKWebCommon.substr(shohinNm, 0, 20))` // Truncate product name to 20 chars [-> L_SHOHIN_NM_01="商品名"] |
| 2 | EXEC | `subbean.sendMessageString(L_SHOHIN_NM_DISP_01, X31CWebConst.DATABEAN_SET_VALUE, shohinNm)` // Full product name for tooltip [-> L_SHOHIN_NM_DISP_01="商品名（ツールチップ用）"] |

**Block 2.8** — [PROCESS] (movement fields initialization — 製造番号、移動理由、指示数、移動対象、移動数、備考) `(L848)`

> Initialize local variables for serial number, movement reason, designated count, movement count, and remarks fields.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `shiteiCd = subbean.sendMessageString(L_SHITEI_WAY_CD_01, X31CWebConst.DATABEAN_GET_VALUE)` // GET designation method code [-> L_SHITEI_WAY_CD_01="指定方法"] |
| 2 | SET | `seizoNo = ""` // Initialize serial number |
| 3 | SET | `riyu = ""` // Initialize movement reason |
| 4 | SET | `sjiCnt = ""` // Initialize designated count |
| 5 | SET | `mvCnt = ""` // Initialize movement count |
| 6 | SET | `biko = ""` // Initialize remarks |

**Block 2.9** — [IF/ELSE] (serial number specification — 製番指定の場合) `(L855)` `[shiteiCd == "2"]`

> If the designation method code equals "2" (serial number specification / 製番指定), extract the serial number from the available source (device serial number or indoor device set serial number, whichever is present), set fixed counts to 1, and fetch remarks from the "with target device" field.

| # | Type | Code |
|---|------|------|
| 1 | SET | Check `!JDKCommonUtil.isNull(shiteiCd) && "2".equals(shiteiCd)` // ShiteiCd == "2" → serial number specified |
| 2 | CALL | `kikiSeizoNm = subbean.sendMessageString(L_KIKI_SEIZO_NO_01, X31CWebConst.DATABEAN_GET_VALUE)` // GET device serial number [-> L_KIKI_SEIZO_NO_01="機器製造番号"] |
| 3 | CALL | `setSeizoNm = subbean.sendMessageString(L_TKKIKI_SETHIN_SEIZO_NO_01, X31CWebConst.DATABEAN_GET_VALUE)` // GET indoor device set serial number [-> L_TKKIKI_SETHIN_SEIZO_NO_01="宅内機器セット品製造番号"] |

**Block 2.9.1** — [IF/ELSE-IF] (set serial number — 存在する名称を設定する) `(L858)`

> Determine which serial number source is available, using priority: device serial number first, then indoor device set serial number.

| # | Type | Code |
|---|------|------|
| 1 | SET | Check `!JDKCommonUtil.isNull(kikiSeizoNm)` |
| 2 | SET | Branch: `seizoNo = kikiSeizoNm` // Use device serial number |
| 3 | SET | Else-If: `!JDKCommonUtil.isNull(setSeizoNm)` |
| 4 | SET | Branch: `seizoNo = setSeizoNm` // Use indoor device set serial number |
| 5 | SET | Else: `seizoNo` remains empty |

**Block 2.9.2** — [PROCESS] (set movement fields for serial number case) `(L863)`

> In the serial number specified case, movement reason and remarks come from the "with target device" fields, and both counts are hardcoded to "1".

| # | Type | Code |
|---|------|------|
| 1 | CALL | `riyu = subbean.sendMessageString(L_ARI_MV_RSN_01, X31CWebConst.DATABEAN_GET_VALUE)` // GET movement reason (with device) [-> L_ARI_MV_RSN_01="移動理由コード名称（対象機器あり）"] |
| 2 | SET | `sjiCnt = "1"` // Hardcoded: designated count = 1 |
| 3 | SET | `mvCnt = "1"` // Hardcoded: movement count = 1 |
| 4 | CALL | `biko = subbean.sendMessageString(L_ARI_BIKO_01, X31CWebConst.DATABEAN_GET_VALUE)` // GET remarks (with device) [-> L_ARI_BIKO_01="備考（対象機器あり）"] |

**Block 2.10** — [ELSE] (other designation — 上記以外の場合) `(L869)`

> For non-serial-number designation methods, read all fields dynamically from the sub-bean and provide a default movement count of "0" if not specified.

| # | Type | Code |
|---|------|------|
| 1 | SET | `seizoNo = ""` // Clear serial number (not applicable) |
| 2 | CALL | `riyu = subbean.sendMessageString(L_NASI_MV_RSN_01, X31CWebConst.DATABEAN_GET_VALUE)` // GET movement reason (without device) [-> L_NASI_MV_RSN_01="移動理由コード名称（対象機器なし）"] |
| 3 | CALL | `sjiCnt = subbean.sendMessageString(L_SJI_CNT_01, X31CWebConst.DATABEAN_GET_VALUE)` // GET designated count [-> L_SJI_CNT_01="指示数"] |
| 4 | CALL | `mvCnt = subbean.sendMessageString(L_MV_CNT_01, X31CWebConst.DATABEAN_GET_VALUE)` // GET movement count [-> L_MV_CNT_01="移動数"] |

**Block 2.10.1** — [IF] (default movement count — 移動数が空の場合は0を設定する) `(L875)`

> If the movement count is null/empty, default it to "0".

| # | Type | Code |
|---|------|------|
| 1 | SET | Check `JDKCommonUtil.isNull(mvCnt)` |
| 2 | SET | Branch: `mvCnt = "0"` // Default movement count to zero |

**Block 2.10.2** — [PROCESS] `(L877)`

| # | Type | Code |
|---|------|------|
| 1 | CALL | `biko = subbean.sendMessageString(L_NASI_BIKO_01, X31CWebConst.DATABEAN_GET_VALUE)` // GET remarks (without device) [-> L_NASI_BIKO_01="備考（対象機器なし）"] |

**Block 2.11** — [PROCESS] (write resolved fields — 製造番号、移動理由、指示数の設定) `(L880)`

> Write back the processed serial number, movement reason, and designated count to the sub-bean.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `subbean.sendMessageString(L_SEIZO_NO_01, X31CWebConst.DATABEAN_SET_VALUE, seizoNo)` // Write serial number [-> L_SEIZO_NO_01="製造番号"] |
| 2 | EXEC | `subbean.sendMessageString(L_MV_RSN_01, X31CWebConst.DATABEAN_SET_VALUE, riyu)` // Write movement reason [-> L_MV_RSN_01="移動理由コード名称"] |
| 3 | EXEC | `subbean.sendMessageString(L_SJI_CNT_01, X31CWebConst.DATABEAN_SET_VALUE, sjiCnt)` // Write designated count [-> L_SJI_CNT_01="指示数"] |

**Block 2.12** — [IF] (movement target check — 移動対象) `(L883)` `[sjiCnt.equals(mvCnt)]`

> If the designated count matches the movement count, check and set the movement target flag to `true`. The comment notes the initial setting is `false` — this method activates it only when counts match.

| # | Type | Code |
|---|------|------|
| 1 | SET | Check `sjiCnt.equals(mvCnt)` // Designated count equals movement count |
| 2 | EXEC | Branch: `subbean.sendMessageBoolean(L_MV_TARGET_01, X31CWebConst.DATABEAN_SET_VALUE, true)` // Set movement target to true [-> L_MV_TARGET_01="移動対象"] |

**Block 2.13** — [PROCESS] (write movement count) `(L889)`

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `subbean.sendMessageString(L_MV_CNT_01, X31CWebConst.DATABEAN_SET_VALUE, mvCnt)` // Write movement count [-> L_MV_CNT_01="移動数"] |

**Block 2.14** — [PROCESS] (remarks with truncation — 備考10文字) `(L891)`

> Write the remarks field truncated to 10 characters for display, and the full remarks for tooltip display.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `subbean.sendMessageString(L_BIKO_01, X31CWebConst.DATABEAN_SET_VALUE, JDKWebCommon.substr(biko, 0, 10))` // Truncate remarks to 10 chars [-> L_BIKO_01="備考"] |
| 2 | EXEC | `subbean.sendMessageString(L_BIKO_DISP_01, X31CWebConst.DATABEAN_SET_VALUE, biko)` // Full remarks for tooltip [-> L_BIKO_DISP_01="備考（ツールチップ用）"] |

**Block 3** — [PROCESS] (set display count — 一覧表示件数を設定する) `(L897)`

> After the loop completes, write the total item count to the service form bean so the screen can display the total number of detail rows.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `serviceFormBean.sendMessageString(DISP_COUNT, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(shosaiList.getCount()))` // Write total count [-> DISP_COUNT="一覧表示件数"] |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `SHOSAI_LIST` | Field | Detail list — Shelf Move Entry Details list (棚移動入荷詳細一覧照会明細リスト). The array of detail row beans processed by this method. |
| `DISP_COUNT` | Field | List display count (一覧表示件数). Total number of detail items, written to the form bean for pagination. |
| `L_COLOR_01` | Field | Background color (背景色). Display metadata for CSS row striping ("even" / "odd"). |
| `L_NO_01` | Field | Row number (項番). 1-based sequential index for table display. |
| `L_TKKIKI_MDL_CD_01` | Field | Indoor device model code (宅内機器型式コード). Primary model code source for the product name resolution. |
| `L_TKKIKI_SETHIN_MDL_CD_01` | Field | Indoor device set model code (宅内機器セット品型式コード). Secondary model code source, used when the primary is absent. |
| `L_HUZOKUHIN_MDL_CD_01` | Field | Accessory model code (付属品型式コード). Tertiary model code source, used as last resort. |
| `L_TKKIKI_MDL_NM_01` | Field | Indoor device model name (宅内機器型式名). Model name corresponding to the primary model code. |
| `L_TKKIKI_SETHIN_MDL_NM_01` | Field | Indoor device set model name (宅内機器セット品型式名). Model name corresponding to the secondary model code. |
| `L_HUZOKUHIN_MDL_NM_01` | Field | Accessory model name (付属品型式名). Model name corresponding to the accessory model code. |
| `L_MDL_NO_01` | Field | Model number (型番). Resolved model code written for display. |
| `L_SHOHIN_NM_01` | Field | Product name (商品名). Truncated to 20 characters for display. |
| `L_SHOHIN_NM_DISP_01` | Field | Product name for tooltip (商品名（ツールチップ用）). Full untruncated product name for hover display. |
| `L_SHITEI_WAY_CD_01` | Field | Designation method (指定方法). Code "2" indicates serial number specification (製番指定). Other values indicate different designation methods. |
| `L_KIKI_SEIZO_NO_01` | Field | Device serial number (機器製造番号). Primary serial number source for device-level items. |
| `L_TKKIKI_SETHIN_SEIZO_NO_01` | Field | Indoor device set serial number (宅内機器セット品製造番号). Secondary serial number source for device set items. |
| `L_SEIZO_NO_01` | Field | Serial number (製造番号). Resolved serial number written for display. |
| `L_ARI_MV_RSN_01` | Field | Movement reason code name — with target device (移動理由コード名称（対象機器あり）). Used when serial number specification is active. |
| `L_NASI_MV_RSN_01` | Field | Movement reason code name — without target device (移動理由コード名称（対象機器なし）). Used when serial number specification is not active. |
| `L_MV_RSN_01` | Field | Movement reason code name (移動理由コード名称). Resolved movement reason written for display. |
| `L_SJI_CNT_01` | Field | Designated count (指示数). The expected number of items to move as instructed. |
| `L_MV_TARGET_01` | Field | Movement target (移動対象). Boolean flag indicating whether the designated count matches the actual movement count. |
| `L_MV_CNT_01` | Field | Movement count (移動数). The actual number of items moved. |
| `L_ARI_BIKO_01` | Field | Remarks — with target device (備考（対象機器あり）). Remarks field for serial number specified items. |
| `L_NASI_BIKO_01` | Field | Remarks — without target device (備考（対象機器なし）). Remarks field for non-serial-number items. |
| `L_BIKO_01` | Field | Remarks (備考). Truncated to 10 characters for display. |
| `L_BIKO_DISP_01` | Field | Remarks for tooltip (備考（ツールチップ用）). Full untruncated remarks for hover display. |
| SHOSAI_LIST (constant) | Constant | "棚移動入荷詳細" — Key for the shelf move entry detail list bean array. |
| 棚移動入荷詳細 | Business term | Shelf Move Entry Details — the core business entity for this screen, representing details of items to be moved between shelves in a warehouse/logistics context. |
| 宅内機器 | Business term | Indoor Device — equipment installed inside a customer premises (e.g., ONT/ONU for fiber services). |
| 付属品 | Business term | Accessory — optional add-on equipment bundled with main devices. |
| 製番指定 | Business term | Serial Number Designation — a designation method (code "2") where items are identified by their unique serial number rather than by quantity-based counting. |
| 指定方法 | Business term | Designation Method — determines how items in the shelf move are identified (by serial number vs. by quantity). |
| 移動理由 | Business term | Movement Reason — the business reason why items are being moved (e.g., relocation, replacement, return). |
| DKW01302 | Screen ID | Screen identifier for the "Shelf Move Entry Details" (棚移動入荷詳細) screen. |
| X31SDataBeanAccess | Technical | OneStop data bean access class — the framework's in-memory bean container for passing structured data between screen layers. |
| X31SDataBeanAccessArray | Technical | Array wrapper for X31SDataBeanAccess — provides list iteration (getCount, getDataBean) over collections of detail beans. |
