# Business Logic — FUW02001SFLogic.mskm() [134 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.FUW02001SF.FUW02001SFLogic` |
| Layer | Service (webview logic, extends JCCWebBusinessLogic) |
| Module | `FUW02001SF` (Package: `eo.web.webview.FUW02001SF`) |

## 1. Role

### FUW02001SFLogic.mskm()

This method is the core business logic handler invoked when a customer presses the **「Apply」button (申し込むボタン)** on the **confirmation screen** for the **Email Alias Setup Registration** (メールエイリアス設定申込) service. The screen module `FUW02001SF` belongs to the K-Opticom customer backbone system (eo顧客基幹システム) and is responsible for fiber-optic broadband subscription workflows.

The method processes a complete **apply-for-email-alias** order, which encompasses **SubOptional Service Contract** operations including registration, lookup, binding, start of usage, changes, and supplementary tasks. It orchestrates a batch of **Service Component (SC)** calls mapped through `FUSV0056_FUSV0056OPDBMapper` — 9 SCs for CRUD operations on ISP service contracts, and 5 **Common Component (CC)** calls for consent checks, email alias validation, service IF data transfer, and service order issuance.

The method acts as the **entry point for the apply (submit) operation** within the Email Alias Setup Registration confirmation workflow. After gathering all customer and contract data from common info beans, building parameter maps, invoking the downstream service pipeline via `invokeService`, and refreshing the general customer contract, it transfers resulting email alias data back to the form bean. Finally, it routes the user to the completion screen `FUW02003` and sends a completion email — choosing between an **addition completion email** (for new registrations) or a **change completion email** (for modifications) based on the `ADD_CHG_DIV` value.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["mskm()"])
    START --> CHECK["Check Common Relation JFUCommonRelationCheck"]
    CHECK --> GETCOMMON["Get Common Info Bean"]
    GETCOMMON --> EXTRACT["Extract Bean Info getCommoninfoBeanInfo"]
    EXTRACT --> SPLIT["Split: ssoInfo, seikyKeiInfo, svcKeiInfo, opSvcKeiInfo, sbopSvcKeiInfo"]
    SPLIT --> SETUP["Setup paramMap + mapper + dataMap"]
    SETUP --> SC1["SC1: setFUSV005601SC Apply Content Approval Registration"]
    SC1 --> SC2["SC2: setFUSV005602SC SubOptional SVC Contract ISP Register"]
    SC2 --> SC10["SC10: setFUSV005610SC SubOptional SVC Contract ISP Lookup"]
    SC10 --> SC3["SC3: setFUSV005603SC SubOptional SVC Contract ISP Binding End"]
    SC3 --> SC4["SC4: setFUSV005604SC SubOptional SVC Contract ISP Start Usage"]
    SC4 --> SC5["SC5: setFUSV005605SC SubOptional SVC Contract ISP Change"]
    SC5 --> SC6["SC6: setFUSV005606SC Email Target End of Use"]
    SC6 --> SC7["SC7: setFUSV005607SC Email Target Registration"]
    SC7 --> SC8["SC8: setFUSV005608SC Advance Registration"]
    SC8 --> SC9["SC9: setFUSV005609SC Apply Detail Lookup Follow-up Delegation"]
    SC9 --> CC1["CC1: setFUSV005601CC SubOptional SVC ISP Consent Check"]
    CC1 --> CC2["CC2: setFUSV005602CC Email List Check"]
    CC2 --> CC3["CC3: setFUSV005603CC Service IF Result Data Transfer"]
    CC3 --> CC4["CC4: setFUSV005604CC Service IF Result Data Transfer"]
    CC4 --> CC5["CC5: setFUSV005605CC Service Order Issuance"]
    CC5 --> SETSTAT["Set OpSvcKeiStatMail JFUWebCommon"]
    SETSTAT --> INVOKE["invokeService paramMap dataMap outputMap"]
    INVOKE --> CATCH["Catch JCCWebServiceException checkException"]
    CATCH --> REFRESH["Refresh GenCustKei JFUWebCommon"]
    REFRESH --> GETCOMMON2["Get Common Info Bean Again"]
    GETCOMMON2 --> EXTRACT2["Extract Updated opSvcKeiInfo sbopSvcKeiInfo"]
    EXTRACT2 --> SETMAIL["Set Now_MLAD from opSvcKeiInfo"]
    SETMAIL --> SETALIAS{"sbopSvcKeiInfo != null"}
    SETALIAS -- Yes --> SETALIAS_PROC["Set Now_MAILALIAS from sbopSvcKeiInfo"]
    SETALIAS_PROC --> GETADDCHG["Get ADD_CHG_DIV from bean"]
    GETADDCHG --> CHECK_ADD{"ADD_CHG_DIV == ADD_CHG_DIV_ADD 0"}
    CHECK_ADD -- Yes --> SEND_MAIL1["Send Completion Email FUW020_1"]
    CHECK_ADD -- No --> CHECK_CHG{"ADD_CHG_DIV == ADD_CHG_DIV_CHG 1"}
    CHECK_CHG -- Yes --> SEND_MAIL2["Send Completion Email FUW020_2"]
    CHECK_CHG -- No --> SET_NEXT_SCREEN["Set NEXT_SCREEN_ID FUW02003"]
    SEND_MAIL1 --> SET_NEXT_SCREEN
    SEND_MAIL2 --> SET_NEXT_SCREEN
    SETALIAS -- No --> GETADDCHG
    SET_NEXT_SCREEN --> RETURN["Return true"]
    RETURN --> END(["END"])
```

**CRITICAL — Constant Resolution:**

| Constant Name | Actual Value | Business Meaning |
|--------------|-------------|------------------|
| `USECASE_ID_FUSV0056` | `"FUSV0056"` | Service ID for Email Alias Setup Registration (Apply) |
| `ADD_CHG_DIV_ADD` | `"0"` | Add/New registration mode |
| `ADD_CHG_DIV_CHG` | `"1"` | Change/Modification mode |
| `CALL_METHOD_MSKM` | `"mskm"` | Call method identifier for exception handling |
| `MSKM_FIN_MAIL_FUW020_1` | `"FUW020_1"` | Completion email template for add operations |
| `MSKM_FIN_MAIL_FUW020_2` | `"FUW020_2"` | Completion email template for change operations |
| `FUW02001SFConst.NOW_MLAD` | `"現在のメールアドレス"` | Current email address field key |
| `FUW02001SFConst.NOW_MAILALIAS` | `"現在のメールエイリアス"` | Current email alias field key |
| `FUW02001SFConst.ADD_CHG_DIV` | `"登録／変更区分"` | Add/Change division field key |
| `JFUScreenConst.SCREEN_ID_FUW02003` | — | Destination screen ID (completion screen) |
| `JFUScreenConst.SCREEN_NAME_FUW02003` | — | Destination screen name |
| `CommonInfoCFConst.SSO_INFO` | — | Key for SSO (Single Sign-On) info bean |
| `CommonInfoCFConst.SEIKY_KEI_INFO` | — | Key for billing contract info bean |
| `CommonInfoCFConst.SVC_KEI_INFO` | — | Key for service contract info bean |
| `CommonInfoCFConst.OP_SVC_KEI_INFO` | — | Key for optional service contract info bean |
| `CommonInfoCFConst.SBOP_SVC_KEI_INFO` | — | Key for sub-optional service contract info bean |
| `CommonInfoCFConst.NEXT_SCREEN_ID` | — | Key for next screen ID |
| `CommonInfoCFConst.NEXT_SCREEN_NAME` | — | Key for next screen name |
| `CommonInfoCFConst.MLAD_28` | — | Email address field in common info bean |
| `CommonInfoCFConst.ALIAS_29` | — | Email alias field in common info bean |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| - | (none) | - | This method takes no parameters. All input data is retrieved from shared beans via `super.getCommonInfoBean()` and `super.getServiceFormBean()`. |
| - | `this` (implicit) | `FUW02001SFLogic` instance | The business logic class itself, extending `JCCWebBusinessLogic`. Provides access to common info beans, service form bean, and inherited `invokeService()` / `checkException()` methods. |
| - | `X31SDataBeanAccess commonInfoBean` | Common info bean | Shared bean containing SSO authentication info, billing contract data, service contract data, optional service contract data, and sub-optional service contract data. Retrieved from the session. |
| - | `X31SDataBeanAccess bean` | Service form bean | The page-level form bean carrying user input fields for the email alias setup registration, including `MAILALIAS`, `ADD_CHG_DIV`, and data populated by SC/CC processing. |
| - | `HashMap<String, String> paramMap` | Parameter map | Carries the usecase ID (`FUSV0056`) for the service invocation framework. |
| - | `HashMap<String, Object> dataMap` | Data transfer map | Accumulates mapped data from SC/CC calls. Contains service contract data, entity references, and intermediate processing results passed to `invokeService`. |
| - | `HashMap<Object, Object> outputMap` | Output map | Collects service invocation output results for post-processing. |
| - | `FUSV0056_FUSV0056OPDBMapper mapper` | Data mapper | Maps data between the form beans and the SC/CC parameter structures. Holds bean index constants and SC/CC title keys. |
| - | `dataMap["SC_TITLE_FUSV00560x"]` | Service Component data | Maps for each SC call, containing functional codes, entity numbers, addresses, and SOD (Service Order Data) structures passed to the service layer. |

## 4. CRUD Operations / Called Services

### Pre-computed evidence from code analysis:

| # | Type | Category | Method | SC Code / Component | Business Description |
|---|------|----------|--------|---------------------|---------------------|
| 1 | CALL | SC | `mapper.setFUSV005601SC()` | FUSV005601SC | Apply content approval registration — registers the order content for email alias setup |
| 2 | CALL | SC | `mapper.setFUSV005602SC()` | FUSV005602SC | SubOptional Service Contract <ISP> registration — creates new ISP service contract |
| 3 | CALL | SC | `mapper.setFUSV005610SC()` | FUSV005610SC | SubOptional Service Contract <ISP> lookup — retrieves ISP contract details |
| 4 | CALL | SC | `mapper.setFUSV005603SC()` | FUSV005603SC | SubOptional Service Contract <ISP> binding end — finalizes ISP contract binding |
| 5 | CALL | SC | `mapper.setFUSV005604SC()` | FUSV005604SC | SubOptional Service Contract <ISP> start usage — activates ISP service usage |
| 6 | CALL | SC | `mapper.setFUSV005605SC()` | FUSV005605SC | SubOptional Service Contract <ISP> change — modifies ISP contract details |
| 7 | CALL | SC | `mapper.setFUSV005606SC()` | FUSV005606SC | Email target end of use — terminates email alias service |
| 8 | CALL | SC | `mapper.setFUSV005607SC()` | FUSV005607SC | Email target registration — registers email alias target |
| 9 | CALL | SC | `mapper.setFUSV005608SC()` | FUSV005608SC | Advance registration — registers supplementary/advance details |
| 10 | CALL | SC | `mapper.setFUSV005609SC()` | FUSV005609SC | Apply detail lookup / follow-up task delegation — retrieves order details and delegates follow-up |
| 11 | CALL | CC | `mapper.setFUSV005601CC()` | FUSV005601CC | SubOptional Service Contract <ISP> consent check — validates ISP contract consent |
| 12 | CALL | CC | `mapper.setFUSV005602CC()` | FUSV005602CC | Email list check (email alias value) — validates email alias data |
| 13 | CALL | CC | `mapper.setFUSV005603CC()` | FUSV005603CC | Service IF result data transfer — transfers service IF result data |
| 14 | CALL | CC | `mapper.setFUSV005604CC()` | FUSV005604CC | Service IF result data transfer — transfers service IF result data (with this context) |
| 15 | CALL | CC | `mapper.setFUSV005605CC()` | FUSV005605CC | Service order issuance — issues service order (SOD) |
| 16 | CALL | CC | `JFUWebCommon.setOpSvcKeiStatMail()` | JFUWebCommon | Sets optional service contract status (mail) on the data map |
| 17 | CALL | EXT | `invokeService()` | FUSV0056 pipeline | Invokes the full service pipeline with all SC/CC data mapped in dataMap |
| 18 | CALL | CC | `JFUWebCommon.refreshGenCustKei()` | JFUWebCommon | Refreshes general customer contract data after processing |
| 19 | CALL | CC | `JFUWebCommon.sendMskmFinMail()` | JFUWebCommon | Sends completion email (FUW020_1 for add, FUW020_2 for change) |

### CRUD Classification:

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| C | `setFUSV005601SC` | FUSV005601SC | KK_T_ODR_HAKKO_JOKEN (Order Content Approval) | Registers order content approval for email alias setup |
| C | `setFUSV005602SC` | FUSV005602SC | KK_T_OPSVKEI_ISP (Optional Service Contract ISP) | Registers new sub-optional ISP service contract |
| R | `setFUSV005610SC` | FUSV005610SC | KK_T_OPSVKEI_ISP (Optional Service Contract ISP) | Looks up sub-optional ISP service contract details |
| U | `setFUSV005603SC` | FUSV005603SC | KK_T_OPSVKEI_ISP (Optional Service Contract ISP) | Binds/finalizes ISP service contract |
| C | `setFUSV005604SC` | FUSV005604SC | KK_T_OPSVKEI_ISP (Optional Service Contract ISP) | Starts ISP service usage |
| U | `setFUSV005605SC` | FUSV005605SC | KK_T_OPSVKEI_ISP (Optional Service Contract ISP) | Modifies ISP service contract |
| D | `setFUSV005606SC` | FUSV005606SC | KK_T_EMAIL_ALIAS (Email Alias Target) | Ends email alias target usage |
| C | `setFUSV005607SC` | FUSV005607SC | KK_T_EMAIL_ALIAS (Email Alias Target) | Registers email alias target |
| C | `setFUSV005608SC` | FUSV005608SC | KK_T_ODR_HAKKO_JOKEN (Order Content Approval) | Registers advance/supplementary details |
| R | `setFUSV005609SC` | FUSV005609SC | KK_T_ODR_HAKKO_JOKEN / KK_T_OPSVKEI_ISP | Looks up order details and delegates follow-up tasks |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:FUW02001 (確認画面 - Confirmation Screen) | Controller → `callCheckOrExe()` (confirm mode) → `mskm()` → `invokeService()` → FUSV005601SC..FUSV005609SC, FUSV005610SC → SC CRUD on KK_T_OPSVKEI_ISP, KK_T_ODR_HAKKO_JOKEN, KK_T_EMAIL_ALIAS | FUSV005601SC [C] KK_T_ODR_HAKKO_JOKEN, FUSV005602SC [C] KK_T_OPSVKEI_ISP, FUSV005604SC [C] KK_T_OPSVKEI_ISP, FUSV005607SC [C] KK_T_EMAIL_ALIAS, FUSV005608SC [C] KK_T_ODR_HAKKO_JOKEN, FUSV005610SC [R] KK_T_OPSVKEI_ISP, FUSV005603SC [U] KK_T_OPSVKEI_ISP, FUSV005605SC [U] KK_T_OPSVKEI_ISP, FUSV005606SC [D] KK_T_EMAIL_ALIAS, FUSV005609SC [R] KK_T_ODR_HAKKO_JOKEN |

**Notes:**
- This method is the **apply button handler** (`call_method` = "mskm") on the **FUW02001 confirmation screen**.
- It is the terminal entry point within the `FUW02001SF` logic module — no other classes invoke `mskm()` directly from external screens.
- The caller is the FUW02001 screen's controller/boundary class, which dispatches to this method based on the button pressed (cfm = confirm, mskm = apply).
- After this method returns `true`, the screen framework navigates to screen `FUW02003` (completion screen).

## 6. Per-Branch Detail Blocks

**Block 1** — [SETUP] Common Relation Check (L372)

> Performs a common relation validation check using the usecase ID FUSV0056.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUCommonRelationCheck.checkCommonRelation(this, USECASE_ID_FUSV0056)` | // Validates common relation for service FUSV0056 |

**Block 2** — [SETUP] Get Common Info Bean (L376)

> Retrieves the shared common info form bean from the session.

| # | Type | Code |
|---|------|------|
| 1 | SET | `X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean()` | // Get common info bean |

**Block 3** — [SETUP] Extract Bean Info (L379)

> Extracts all shared bean information and splits into individual typed beans.

| # | Type | Code |
|---|------|------|
| 1 | SET | `Map<String, Object> resultMap = getCommoninfoBeanInfo(commoninfoBean)` | // Extract common info bean data |
| 2 | SET | `X31SDataBeanAccess ssoInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.SSO_INFO)` | // SSO info [-> SSO_INFO] |
| 3 | SET | `X31SDataBeanAccess seikyKeiInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.SEIKY_KEI_INFO)` | // Billing contract info [-> SEIKY_KEI_INFO] |
| 4 | SET | `X31SDataBeanAccess svcKeiInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.SVC_KEI_INFO)` | // Service contract info [-> SVC_KEI_INFO] |
| 5 | SET | `X31SDataBeanAccess opSvcKeiInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.OP_SVC_KEI_INFO)` | // Optional service contract info [-> OP_SVC_KEI_INFO] |
| 6 | SET | `X31SDataBeanAccess sbopSvcKeiInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.SBOP_SVC_KEI_INFO)` | // Sub-optional service contract info [-> SBOP_SVC_KEI_INFO] |

**Block 4** — [SETUP] Get Service Form Bean (L383)

> Retrieves the service-specific form bean carrying user input data.

| # | Type | Code |
|---|------|------|
| 1 | SET | `X31SDataBeanAccess bean = super.getServiceFormBean()` | // Get service form bean |

**Block 5** — [SETUP] Setup paramMap and Mapper (L388-400)

> Initializes processing parameters: usecase ID map, mapper instance, and data map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `HashMap<String, String> paramMap = new HashMap<String, String>(16)` | // Usecase ID holder map |
| 2 | SET | `paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0056)` | // [-> FUSV0056] Service ID for Email Alias Setup Registration |
| 3 | SET | `FUSV0056_FUSV0056OPDBMapper mapper = new FUSV0056_FUSV0056OPDBMapper()` | // Create OP DB mapper |
| 4 | SET | `HashMap<String, Object> dataMap = new HashMap<String, Object>()` | // Data map |
| 5 | SET | `X31SDataBeanAccess[] paramBean = { bean, ssoInfoBean, seikyKeiInfoBean, svcKeiInfoBean, opSvcKeiInfoBean, sbopSvcKeiInfoBean }` | // Bean array for SC/CC calls |

**Block 6** — [CALL:SC] Service Component Calls (L403-423)

> Invokes 9 Service Component mapping methods in sequential order. Each call maps form bean data to SC parameters and updates `dataMap`.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `dataMap = mapper.setFUSV005601SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` | // SC1: Apply Content Approval Registration |
| 2 | CALL | `dataMap = mapper.setFUSV005602SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` | // SC2: SubOptional SVC Contract ISP Register |
| 3 | CALL | `dataMap = mapper.setFUSV005610SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` | // SC10: SubOptional SVC Contract ISP Lookup |
| 4 | CALL | `dataMap = mapper.setFUSV005603SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` | // SC3: SubOptional SVC Contract ISP Binding End |
| 5 | CALL | `dataMap = mapper.setFUSV005604SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` | // SC4: SubOptional SVC Contract ISP Start Usage |
| 6 | CALL | `dataMap = mapper.setFUSV005605SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` | // SC5: SubOptional SVC Contract ISP Change |
| 7 | CALL | `dataMap = mapper.setFUSV005606SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` | // SC6: Email Target End of Use |
| 8 | CALL | `dataMap = mapper.setFUSV005607SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` | // SC7: Email Target Registration |
| 9 | CALL | `dataMap = mapper.setFUSV005608SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` | // SC8: Advance Registration |
| 10 | CALL | `dataMap = mapper.setFUSV005609SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` | // SC9: Apply Detail Lookup / Follow-up Delegation |

**Block 7** — [CALL:CC] Common Component Calls (L427-441)

> Invokes 5 Common Component methods for consent checks, email validation, data transfer, and order issuance.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `dataMap = mapper.setFUSV005601CC(paramBean, dataMap)` | // CC1: SubOptional SVC Contract ISP Consent Check |
| 2 | CALL | `dataMap = mapper.setFUSV005602CC(paramBean, dataMap)` | // CC2: Email List Check (Email Alias Value) |
| 3 | CALL | `dataMap = mapper.setFUSV005603CC(paramBean, dataMap)` | // CC3: Service IF Result Data Transfer |
| 4 | CALL | `dataMap = mapper.setFUSV005604CC(paramBean, dataMap, this)` | // CC4: Service IF Result Data Transfer (with this context) |
| 5 | CALL | `dataMap = mapper.setFUSV005605CC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1)` | // CC5: Service Order Issuance |

**Block 8** — [CALL:CC] Set Operation Status Mail (L444)

> Sets the optional service contract status to mail type on the data map.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUWebCommon.setOpSvcKeiStatMail(this, dataMap)` | // Set OpSvcKeiStatMail |

**Block 9** — [CALL:EXT] Service Invocation with Exception Handling (L448-458)

> Invokes the downstream service pipeline with all mapped data. Catches and handles web service exceptions.

| # | Type | Code |
|---|------|------|
| 1 | SET | `HashMap<Object, Object> outputMap = new HashMap<Object, Object>()` | // Output result map |
| 2 | CALL | `invokeService(paramMap, dataMap, outputMap)` | // Invoke the full service pipeline |

**Block 9.1** — [CATCH] Exception Handling (L459-462)

> Catches `JCCWebServiceException` and delegates to exception check with the `mskm` call method identifier.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `checkException(se, CALL_METHOD_MSKM)` | // [-> "mskm"] Check and handle web service exception |

**Block 10** — [CALL:CC] Refresh General Customer Contract (L465)

> Refreshes the general customer contract data after service processing is complete.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUWebCommon.refreshGenCustKei(this)` | // Refresh general customer contract |

**Block 11** — [SETUP] Re-fetch Common Info Bean (L469-480)

> Re-retrieves the common info bean to get updated data post-service call, specifically the optional service contract info and sub-optional service contract info.

| # | Type | Code |
|---|------|------|
| 1 | SET | `commoninfoBean = super.getCommonInfoBean()` | // Re-get common info bean |
| 2 | SET | `resultMap = getCommoninfoBeanInfo(commoninfoBean)` | // Re-extract common info bean data |
| 3 | SET | `opSvcKeiInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.OP_SVC_KEI_INFO)` | // Updated optional service contract info [-> OP_SVC_KEI_INFO] |
| 4 | SET | `sbopSvcKeiInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.SBOP_SVC_KEI_INFO)` | // Updated sub-optional service contract info [-> SBOP_SVC_KEI_INFO] |

**Block 12** — [EXEC] Set Email Address (L483)

> Transfers the current email address from the optional service contract info to the service form bean's NOW_MLAD field.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `bean.sendMessageString(FUW02001SFConst.NOW_MLAD, X31CWebConst.DATABEAN_SET_VALUE, opSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.MLAD_28, X31CWebConst.DATABEAN_GET_VALUE))` | // NOW_MLAD <- opSvcKeiInfo.MLAD_28 [-> 現在のメールアドレス] |

**Block 13** — [IF] Set Email Alias (L485-489)

> Conditionally sets the email alias from the sub-optional service contract info if it is not null.

| # | Type | Code |
|---|------|------|
| 1 | SET | `if (sbopSvcKeiInfoBean != null)` | // Null check for sub-optional service contract info |

**Block 13.1** — [EXEC] Set Email Alias Value

| # | Type | Code |
|---|------|------|
| 1 | CALL | `bean.sendMessageString(FUW02001SFConst.NOW_MAILALIAS, X31CWebConst.DATABEAN_SET_VALUE, sbopSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.ALIAS_29, X31CWebConst.DATABEAN_GET_VALUE))` | // NOW_MAILALIAS <- sbopSvcKeiInfo.ALIAS_29 [-> 現在のメールエイリアス] |

**Block 14** — [SETUP] Get Add/Change Division (L491)

> Reads the add/change division flag from the service form bean to determine the operation type.

| # | Type | Code |
|---|------|------|
| 1 | SET | `String addChgDiv = bean.sendMessageString(FUW02001SFConst.ADD_CHG_DIV, X31CWebConst.DATABEAN_GET_VALUE)` | // Get add/change division [-> 登録／変更区分] |

**Block 15** — [IF] Addition Completion Email (L493-496)

> If `ADD_CHG_DIV` equals `"0"` (Add/New), invoke the completion email service with the add email template.

| # | Type | Code |
|---|------|------|
| 1 | SET | `if (ADD_CHG_DIV_ADD.equals(addChgDiv))` | // [-> "0"] Add/New registration mode |

**Block 15.1** — [CALL:CC] Send Completion Email (Add)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUWebCommon.sendMskmFinMail(this, MSKM_FIN_MAIL_FUW020_1)` | // [-> "FUW020_1"] Send completion email for add operation |

**Block 16** — [ELSE-IF] Change Completion Email (L497-500)

> If `ADD_CHG_DIV` equals `"1"` (Change/Modification), invoke the completion email service with the change email template.

| # | Type | Code |
|---|------|------|
| 1 | SET | `else if (ADD_CHG_DIV_CHG.equals(addChgDiv))` | // [-> "1"] Change/Modification mode |

**Block 16.1** — [CALL:CC] Send Completion Email (Change)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUWebCommon.sendMskmFinMail(this, MSKM_FIN_MAIL_FUW020_2)` | // [-> "FUW020_2"] Send completion email for change operation |

**Block 17** — [SETUP] Set Next Screen (L503-505)

> Sets the destination screen ID and screen name for navigation after processing completes.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW02003)` | // Set next screen to FUW02003 |
| 2 | CALL | `commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW02003)` | // Set next screen name to FUW02003 |

**Block 18** — [RETURN] Return true (L507)

> Always returns `true` to indicate successful processing.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return true` | // Always returns true |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `FUW02001SF` | Module | Email Alias Setup Registration screen module — handles the workflow for customers to register new email aliases for their broadband subscription |
| `mskm` | Method | Apply button handler (申し込む) — processes the customer's submission on the confirmation screen |
| `FUSV0056` | Service ID | Service ID for Email Alias Setup Registration (Apply) — identifies the service in the invocation framework |
| `ADD_CHG_DIV` | Field | Add/Change division — distinguishes between new registration (`"0"`) and modification (`"1"`) operations |
| `ADD_CHG_DIV_ADD` | Constant | Registration mode value (`"0"`) — triggers addition completion email |
| `ADD_CHG_DIV_CHG` | Constant | Change mode value (`"1"`) — triggers change completion email |
| `COMMON_INFO_BEAN` | Shared Bean | Common information form bean — holds shared session data including SSO, billing, service, optional, and sub-optional contract info |
| `SSO_INFO` | Bean Key | Single Sign-On authentication information within the common info bean |
| `SEIKY_KEI_INFO` | Bean Key | Billing contract information — contains billing contract number and related data |
| `SVC_KEI_INFO` | Bean Key | Service contract information — contains service line contract details |
| `OP_SVC_KEI_INFO` | Bean Key | Optional service contract information — contains optional service (ISP) contract number, email address, and status |
| `SBOP_SVC_KEI_INFO` | Bean Key | Sub-optional service contract information — contains sub-optional (email alias) contract number and alias details |
| `MAILALIAS` | Field | Email alias — the alias email address configured for the customer |
| `MLAD_28` | Field | Email address field (item 28) in the common info bean — carries the current email address |
| `ALIAS_29` | Field | Email alias field (item 29) in the common info bean — carries the alias value |
| `NOW_MLAD` | Field | Current email address (現在のメールアドレス) — form field key for displaying the current email |
| `NOW_MAILALIAS` | Field | Current email alias (現在のメールエイリアス) — form field key for displaying the current alias |
| `FUSV005601SC` | SC Code | Apply Content Approval Registration — registers the order content for email alias setup in the order approval table |
| `FUSV005602SC` | SC Code | SubOptional Service Contract <ISP> Registration — creates a new ISP optional service contract |
| `FUSV005603SC` | SC Code | SubOptional Service Contract <ISP> Binding End — finalizes the ISP service contract binding |
| `FUSV005604SC` | SC Code | SubOptional Service Contract <ISP> Start Usage — activates the ISP service |
| `FUSV005605SC` | SC Code | SubOptional Service Contract <ISP> Change — modifies the ISP service contract |
| `FUSV005606SC` | SC Code | Email Target End of Use — terminates the email alias target |
| `FUSV005607SC` | SC Code | Email Target Registration — registers a new email alias target |
| `FUSV005608SC` | SC Code | Advance Registration — registers supplementary/advance details |
| `FUSV005609SC` | SC Code | Apply Detail Lookup / Follow-up Delegation — retrieves order details and delegates follow-up tasks |
| `FUSV005610SC` | SC Code | SubOptional Service Contract <ISP> Lookup — retrieves ISP contract details |
| `FUSV005601CC` | CC Code | SubOptional Service Contract <ISP> Consent Check — validates ISP contract consent |
| `FUSV005602CC` | CC Code | Email List Check — validates email alias values |
| `FUSV005603CC` | CC Code | Service IF Result Data Transfer — transfers service IF result data |
| `FUSV005604CC` | CC Code | Service IF Result Data Transfer (context-aware) — transfers service IF result data with business logic context |
| `FUSV005605CC` | CC Code | Service Order Issuance — issues a service order (SOD) |
| `JFUWebCommon` | Utility Class | Web common utility class providing shared business functions: relation checks, customer refresh, email sending, status setting |
| `JFUCommonRelationCheck` | Utility Class | Common relation check component for validating cross-relation data integrity |
| `invokeService` | Framework Method | Base class method that dispatches the service pipeline using the mapped SC/CC data in `dataMap` |
| `checkException` | Framework Method | Base class method for exception handling with context about which method called the service |
| `sendMskmFinMail` | CC Method | Sends the application completion email to the customer |
| `FUW020_1` | Constant | Email template key for addition (new registration) completion email |
| `FUW020_2` | Constant | Email template key for change (modification) completion email |
| `refreshGenCustKei` | CC Method | Refreshes general customer contract data in the session after processing |
| `KK_T_OPSVKEI_ISP` | DB Table | Optional Service Contract ISP table — stores ISP optional service contract records |
| `KK_T_ODR_HAKKO_JOKEN` | DB Table | Order Content Approval table — stores order content approval records |
| `KK_T_EMAIL_ALIAS` | DB Table | Email Alias target table — stores email alias configuration records |
| SOD | Acronym | Service Order Data — telecommunications order fulfillment entity that tracks service orders |
| ISP | Business term | Internet Service Provider — the broadband internet service contracted by the customer |
| SC | Acronym | Service Component — backend service layer method that performs data CRUD operations |
| CC | Acronym | Common Component — shared utility component for cross-cutting business logic |
| SVC_KEI | Abbreviation | Service Keiyaku (サービス契約) — Service Contract |
| OP_SVC_KEI | Abbreviation | Optional Service Contract (オプションサービス契約) |
| SBOP_SVC_KEI | Abbreviation | Sub-Optional Service Contract (サブオプションサービス契約) |
| SEIKY_KEI | Abbreviation | Seikyuu Keiyaku (請求契約) — Billing Contract |
| KEI_KAN | Abbreviation | Keiyaku Kanri (契約管理) — Contract Management |
| MSKM | Abbreviation | Moshikomi (申し込む) — Apply / Submit |
| FUW02003 | Screen ID | Completion screen — the destination screen after successful email alias registration processing |
| FUNC_CD_1 | Constant | Function code 1 — indicates registration/apply mode for SC/CC calls |
