# Business Logic — FUW01901SFLogic.cfm() [120 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.FUW01901SF.FUW01901SFLogic` |
| Layer | Web Business Logic (Controller/Application Layer) |
| Module | `FUW01901SF` (Package: `eo.web.webview.FUW01901SF`) |

## 1. Role

### FUW01901SFLogic.cfm()

The `cfm()` method is the central confirmation-screen processing routine for the **Mail Address Addition Application** (メールアドレス追加申込) workflow within the K-Opticom customer core system. It is triggered when a customer clicks the confirmation button on the application screen (FUW019010PJP), initiating a comprehensive data mapping and service invocation pipeline. The method performs a **data mapping dispatch pattern**: it instantiates the `FUSV0054_FUSV0054OPDBMapper`, populates a shared data map by calling 22 mapping methods (14 SC methods for service contract data and 7 CC methods for post-processing configuration), and then delegates to the downstream business processing pipeline via `invokeService()`.

The method handles **multiple service contract operations** including: order content approval registration, option service contract (ISP) registration, option service contract (ISP) inquiry/agreement/agreement meeting, joining target registration for new services, progress/follow-up registration, instruction document registration, service IF result data transfer, order issuance condition registration, opt-in email reception setting registration, mail address addition application processing (including joining eligibility checks and initial POPID password acquisition), and family pack guidance necessity judgment.

In its **design**, `cfm()` implements a **delegation pattern** — it does not perform data persistence directly but instead prepares and dispatches data to the ESB-based service layer through `invokeService()`, which routes to the appropriate batch service components. After service invocation, it performs a **joining target validation check** (via `getFUSV005405CC`) to determine whether any mail addresses in the application are invalid or prohibited, and if so, displays an error message while still proceeding to the completion screen. Finally, it refreshes the general customer information (`refreshGenCustKei`) and sets the next-screen destination to `FUW01902` (Mail Address Addition Application Confirmation), ensuring proper navigation flow.

The method is the **primary entry point** for the confirmation flow of the mail address addition screen. It has no input parameters — all data is sourced from shared form beans (common info bean and service form bean) that are populated during the prior screen rendering phase.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["cfm()"])
    START --> GET_COMMON["Get common form bean"]
    GET_COMMON --> GET_INFO["Get customer contract info (resultMap)"]
    GET_INFO --> EXTRACT_SSO["Extract SYSID and info beans
(SSO, OP_SVC_KEI, SEIKY, SVC_KEI)"]
    EXTRACT_SSO --> GET_SVCBEAN["Get service form bean"]
    GET_SVCBEAN --> CALC_MLAD["Calculate mail address counts
(stku, max, add_psb, mryo)"]
    CALC_MLAD --> STORE_MLAD["Store mail address counts in bean"]
    STORE_MLAD --> PREP_ARRAY["Prepare bean array
[service, opSvcKei, seiky, sso, svcKei]"]
    PREP_ARRAY --> PREP_PARAM["Set paramMap
USECASE_ID = FUSV0054"]
    PREP_PARAM --> CREATE_MAPPER["Create FUSV0054 mapper"]
    CREATE_MAPPER --> SET01SC["setFUSV005401SC
Order content approval registration"]
    SET01SC --> SET02SC["setFUSV005402SC
Option SVC contract ISP registration"]
    SET02SC --> SET09SC["setFUSV005409SC
Option SVC contract ISP inquiry"]
    SET09SC --> SET03SC["setFUSV005403SC
Option SVC contract ISP agreement"]
    SET03SC --> SET04SC["setFUSV005404SC
Option SVC contract ISP start"]
    SET04SC --> SET05SC["setFUSV005405SC
Joining target registration"]
    SET05SC --> SET06SC["setFUSV005406SC
Joining target registration"]
    SET06SC --> SET07SC["setFUSV005407SC
Advance registration"]
    SET07SC --> SET08SC["setFUSV005408SC
Order details inquiry / follow-up request"]
    SET08SC --> SET10SC["setFUSV005410SC
Option SVC contract agreement meeting"]
    SET10SC --> SET11SC["setFUSV005411SC
Option SVC contract ISP agreement meeting"]
    SET11SC --> SET12SC["setFUSV005412SC
Instruction registration"]
    SET12SC --> SET01CC["setFUSV005401CC
Service IF result data transfer"]
    SET01CC --> SET02CC["setFUSV005402CC
Order issuance condition registration"]
    SET02CC --> SET03CC["setFUSV005403CC
Service IF result data transfer"]
    SET03CC --> SET04CC["setFUSV005404CC
Opt-in email reception setting reg"]
    SET04CC --> SET05CC["setFUSV005405CC
Mail address addition joining check"]
    SET05CC --> SET06CC["setFUSV005406CC
Initial POPID password acquisition"]
    SET06CC --> SET13CC["setFUSV005413CC
Family pack guidance judgment"]
    SET13CC --> SET_SVC_STAT["setSvcKeiStat
Set service contract status"]
    SET_SVC_STAT --> INVOKE_TRY["Try invokeService"]
    INVOKE_TRY --> INVOKE_OK["invokeService succeeds"]
    INVOKE_TRY --> INVOKE_ERR["JCCWebServiceException"]
    INVOKE_ERR --> CHK_ERR["chkRelationServiceError"]
    CHK_ERR --> GET_JOIN["getFUSV005405CC
Joining check result"]
    INVOKE_OK --> GET_JOIN
    GET_JOIN --> CHECK_NG{ccResult == NG}
    CHECK_NG -- "Yes"
(NG="NG") --> SHOW_ERR["Set error:
Mail address unavailable"]
    SHOW_ERR --> REFRESH["refreshGenCustKei"]
    REFRESH --> SET_NEXT["Set next screen
= FUW01902"]
    SET_NEXT --> RETURN_T(["return true"])
    CHECK_NG -- "No" --> REFRESH
    RETURN_T --> END(["END"])
```

**Processing Flow:**

1. **Shared Form Bean Access**: The method retrieves the common info bean and extracts customer contract data, including the SYSID (for SSO authentication) and five separate information beans for different contract domains.

2. **Mail Address Count Calculation**: The method calculates and stores four mail address-related counts in the service form bean:
   - `MLAD_STKU_CNT` (already obtained mail address count)
   - `MLAD_MAX_CNT` (maximum mail address count)
   - `MLAD_ADD_PSB_CNT` (addable mail address count = max - obtained)
   - `MLAD_MRYO_CNT` (free mail address count = free allowance - obtained)

3. **Data Mapping**: A bean array containing all five information beans is assembled, and the `FUSV0054_FUSV0054OPDBMapper` populates the `dataMap` through 21 mapping method calls — 14 SC (Service Component) methods and 7 CC (Common Component) methods. Each mapping call extracts data from the form beans and populates the output map for downstream service processing.

4. **Service Invocation**: The method invokes the business processing pipeline via `invokeService()`, which routes to the ESB-based service components. This is wrapped in a try-catch block to handle `JCCWebServiceException`.

5. **Joining Target Validation**: After service invocation, `getFUSV005405CC()` performs a joining target eligibility check. If the result equals `"NG"` (not good / failed), an error message is displayed indicating the mail address cannot be used.

6. **Customer Refresh and Navigation**: Regardless of the joining check result, the method refreshes the general customer information and sets the next screen to `FUW01902` (Mail Address Addition Application Confirmation), always returning `true` to indicate successful processing.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| - | (none) | - | The method takes no input parameters. All business data is sourced from shared form beans (common info bean and service form bean) that are populated during prior screen rendering. |

**Instance Fields and External State Read:**

| # | Field / External State | Type | Business Description |
|---|----------------------|------|---------------------|
| 1 | `USECASE_ID_FUSV0054` | `static final String` | Use case identifier `"FUSV0054"` — routes the service invocation to the correct business processing pipeline |
| 2 | `super.getCommonInfoBean()` | `X31SDataBeanAccess` | Shared common form bean containing cross-screen customer context (SSO info, service contract details, billing info) |
| 3 | `super.getServiceFormBean()` | `X31SDataBeanAccess` | Service-specific form bean holding the mail address addition application data submitted by the customer |
| 4 | `CommonInfoCFConst.SYSID_21` | `String` | Key for extracting the SYSID (system identification) from the common info result map |
| 5 | `CommonInfoCFConst.SSO_INFO` | `String` | Key for extracting the SSO (single sign-on) information bean |
| 6 | `CommonInfoCFConst.OP_SVC_KEI_INFO` | `String` | Key for extracting the option service contract information bean |
| 7 | `CommonInfoCFConst.SEIKY_KEI_INFO` | `String` | Key for extracting the billing contract information bean |
| 8 | `CommonInfoCFConst.SVC_KEI_INFO` | `String` | Key for extracting the service contract information bean |
| 9 | `FUW01901SFConst.MLAD_STKU_CNT` | `String` | Bean key for "mail address obtained count" |
| 10 | `FUW01901SFConst.MLAD_MAX_CNT` | `String` | Bean key for "mail address maximum count" |
| 11 | `FUW01901SFConst.MLAD_ADD_PSB_CNT` | `String` | Bean key for "mail address addable count" |
| 12 | `FUW01901SFConst.MLAD_MRYO_CNT` | `String` | Bean key for "mail address free count" |
| 13 | `NG` | `static final String` | Constant `"NG"` — indicates a failed / not-good result in the joining target check |
| 14 | `JPCModelConstant.FUNC_CD_1` | `String` | Function code 1 — passed to mapping methods for processing variant |
| 15 | `JPCModelConstant.FUNC_CD_2` | `String` | Function code 2 — passed to mapping methods for processing variant |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005401SC` | FUSV005401SC | - | Maps order content approval registration data (request info + SYSID) into the output map |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005402SC` | FUSV005402SC | - | Maps option service contract (ISP) registration data (contract number, SYSID, requested mail account, billing number, update timestamp, mailbox capacity) into the output map |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005409SC` | FUSV005409SC | - | Maps option service contract (ISP) inquiry data |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005403SC` | FUSV005403SC | - | Maps option service contract (ISP) agreement data |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005404SC` | FUSV005404SC | - | Maps option service contract (ISP) start data (mailbox capacity) |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005405SC` | FUSV005405SC | - | Maps joining target registration data |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005406SC` | FUSV005406SC | - | Maps joining target registration data |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005407SC` | FUSV005407SC | - | Maps advance registration data |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005408SC` | FUSV005408SC | - | Maps order details inquiry and follow-up request data |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005410SC` | FUSV005410SC | - | Maps option service contract agreement meeting data |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005411SC` | FUSV005411SC | - | Maps option service contract (ISP) agreement meeting data |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005412SC` | FUSV005412SC | - | Maps instruction document registration data |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005401CC` | FUSV005401CC | - | Transfers service IF result data to the current logic context |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005402CC` | FUSV005402CC | - | Registers order issuance condition data (order data, customer info) |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005403CC` | FUSV005403CC | - | Transfers service IF result data to bean arrays |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005404CC` | FUSV005404CC | - | Registers opt-in email reception setting data |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005405CC` | FUSV005405CC | - | Validates mail address addition application joining eligibility; returns `"OK"` or `"NG"` |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005406CC` | FUSV005406CC | - | Acquires initial POPID password for mail address addition |
| - | `FUSV0054_FUSV0054OPDBMapper.setFUSV005413CC` | FUSV005413CC | - | Determines whether family pack guidance notification is necessary |
| - | `FUSV0054_FUSV0054OPDBMapper.getFUSV005405CC` | FUSV005405CC | - | Retrieves the joining target check result (`"OK"` or `"NG"`) |
| - | `JCCBatCommon.invokeService` | FUSV0054 | - | ESB-based service invocation dispatcher; routes `dataMap` to downstream batch services |
| - | `JFUWebCommon.setSvcKeiStat` | - | - | Sets the service contract status in the data map |
| - | `JFUWebCommon.refreshGenCustKei` | - | - | Refreshes general customer contract information after processing |
| - | `JFUWebCommon.setMessageInfo` | - | `JPCOnlineMessageConstant.EKF0420_TW` | Sets the error message for invalid mail address |

**How to classify:**

The method primarily acts as a **data preparation and dispatch layer**. The 14 SC (Service Component) mapping methods prepare data structures that are passed to `invokeService()`, which routes to downstream ESB batch services. The actual CRUD operations (Create/Read/Update/Delete) on database tables are executed within those downstream services, not directly within `cfm()`. The CC (Common Component) methods handle post-processing tasks like data transfer, condition registration, and validation checks.

The `invokeService()` call is the primary point where business data is dispatched to the ESB-based processing pipeline. The specific SC batch services and database tables involved depend on the use case parameters (service codes, contract types, order content codes) contained within the `dataMap`.

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Screen:FUW01901 (Confirm) | `WEBGAMEN_FUW019010PJP` -> BL=`FUW01901SF` -> `FUW01901SFLogic.cfm()` | `invokeService [dispatch]` -> FUSV0054 SC pipeline -> 14 SC mappings |
| 2 | Screen:FUW01902 (Completion) | `WEBGAMEN_FUW019020PJP` -> BL=`FUW01901SF` -> `FUW01901SFLogic.cfm()` | Same as #1; sets NEXT_SCREEN_ID to FUW01902 |
| 3 | Screen:FUW01903 (Edit) | `WEBGAMEN_FUW019030PJP` -> BL=`FUW01901SF` -> `FUW01901SFLogic.cfm()` | Same as #1; sets NEXT_SCREEN_ID to FUW01902 |

**Call Chain Details:**

- **Screen FUW01901 (Confirm)**: The confirmation screen (`WEBGAMEN_FUW019010PJP`) defines `FUW01901SFLogic` as the business logic class with BL id `FUW01901SF`. When the user clicks the confirm button, the X31 framework routes to this logic class's `cfm()` method.

- **Screen FUW01902 (Completion)**: The completion screen (`WEBGAMEN_FUW019020PJP`) uses the same VL command (`FUW01901SF`) and thus also invokes the same `cfm()` method.

- **Screen FUW01903 (Edit)**: The edit screen (`WEBGAMEN_FUW019030PJP`) similarly uses VL command `FUW01901SF` to invoke `cfm()`.

**Downstream Call Chain:**

`cfm()` -> `invokeService(paramMap, dataMap, outputMap)` -> `JCCBatCommon.invokeService()` -> `JCCBatchEsbInterface.invokeService()` -> ESB dispatch to SC batch services (FUSV0054 pipeline) -> downstream database operations within SC services.

The terminal operations reached from this method include:
- `setFUSV005401SC` -> Order content approval registration data preparation
- `setFUSV005402SC` -> Option SVC contract ISP registration data preparation
- `setFUSV005409SC` -> Option SVC contract ISP inquiry data preparation
- `setFUSV005403SC` -> Option SVC contract ISP agreement data preparation
- `setFUSV005404SC` -> Option SVC contract ISP start data preparation
- `setFUSV005405SC` -> Joining target registration data preparation
- `setFUSV005406SC` -> Joining target registration data preparation
- `setFUSV005407SC` -> Advance registration data preparation
- `setFUSV005408SC` -> Order details inquiry / follow-up request data preparation
- `setFUSV005410SC` -> Option SVC contract agreement meeting data preparation
- `setFUSV005411SC` -> Option SVC contract ISP agreement meeting data preparation
- `setFUSV005412SC` -> Instruction document registration data preparation
- `setFUSV005401CC` -> Service IF result data transfer
- `setFUSV005402CC` -> Order issuance condition registration
- `setFUSV005403CC` -> Service IF result data transfer to bean arrays
- `setFUSV005404CC` -> Opt-in email reception setting registration
- `setFUSV005405CC` -> Mail address addition application joining check
- `setFUSV005406CC` -> Initial POPID password acquisition
- `setFUSV005413CC` -> Family pack guidance necessity judgment
- `getFUSV005405CC` -> Joining check result retrieval (returns OK/NG)
- `invokeService` -> ESB dispatch to FUSV0054 SC pipeline

## 6. Per-Branch Detail Blocks

**Block 1** — [SET] Common Form Bean Acquisition (L280)

> Acquires the shared form bean and extracts customer contract information.

| # | Type | Code |
|---|------|------|
| 1 | SET | `commoninfoBean = super.getCommonInfoBean()` |
| 2 | SET | `resultMap = getCommoninfoBeanInfo(commoninfoBean, null)` |
| 3 | SET | `ssoInfoSysid = (String) resultMap.get(CommonInfoCFConst.SYSID_21)` |
| 4 | SET | `ssoInfoBean = (X31SDataBeanAccess) resultMap.get(CommonInfoCFConst.SSO_INFO)` |
| 5 | SET | `opSvcKeiInfoBean = (X31SDataBeanAccess) resultMap.get(CommonInfoCFConst.OP_SVC_KEI_INFO)` |
| 6 | SET | `seikyKeiInfoBean = (X31SDataBeanAccess) resultMap.get(CommonInfoCFConst.SEIKY_KEI_INFO)` |
| 7 | SET | `svcKeiInfoBean = (X31SDataBeanAccess) resultMap.get(CommonInfoCFConst.SVC_KEI_INFO)` |

**Block 2** — [SET] Service Form Bean Acquisition and Mail Address Count Calculation (L295-302)

> Acquires the service-specific form bean and calculates mail address-related counts for display on the confirmation screen.

| # | Type | Code |
|---|------|------|
| 1 | SET | `bean = super.getServiceFormBean()` |
| 2 | SET | `mladCnt = (Integer) resultMap.get(FUW01901SFConst.MLAD_STKU_CNT)` // Mail address obtained count |
| 3 | EXEC | `bean.sendMessageString(FUW01901SFConst.MLAD_STKU_CNT, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(mladCnt))` // Set obtained count in service bean |
| 4 | SET | `mladMaxCnt = bean.sendMessageLong(FUW01901SFConst.MLAD_MAX_CNT, X31CWebConst.DATABEAN_GET_VALUE).intValue()` // Get max allowed mail addresses |
| 5 | EXEC | `bean.sendMessageString(FUW01901SFConst.MLAD_ADD_PSB_CNT, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(mladMaxCnt - mladCnt))` // Set addable count |

**Block 3** — [SET] Bean Array Preparation and paramMap Generation (L305-313)

> Prepares the bean array for mapper calls and generates the use case ID parameter map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `beanArray = { bean, opSvcKeiInfoBean, seikyKeiInfoBean, ssoInfoBean, svcKeiInfoBean }` |
| 2 | SET | `paramMap = new HashMap<String, String>(16)` |
| 3 | SET | `paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0054)` [-> `USECASE_ID_FUSV0054 = "FUSV0054"`] |
| 4 | SET | `mapper = new FUSV0054_FUSV0054OPDBMapper()` |
| 5 | SET | `dataMap = new HashMap<String, Object>()` |

**Block 4** — [CALL] SC Mapping Methods (L318-342)

> Calls 14 SC (Service Component) mapping methods to populate the dataMap with service contract data for downstream processing.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `mapper.setFUSV005401SC(bean, dataMap, JPCModelConstant.FUNC_CD_2, ssoInfoSysid)` // Order content approval registration |
| 2 | CALL | `mapper.setFUSV005402SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2, ssoInfoSysid)` // Option SVC contract <ISP> registration |
| 3 | CALL | `mapper.setFUSV005409SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2)` // Option SVC contract <ISP> inquiry |
| 4 | CALL | `mapper.setFUSV005403SC(bean, dataMap, JPCModelConstant.FUNC_CD_2)` // Option SVC contract <ISP> agreement |
| 5 | CALL | `mapper.setFUSV005404SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2)` // Option SVC contract <ISP> start |
| 6 | CALL | `mapper.setFUSV005405SC(bean, dataMap, JPCModelConstant.FUNC_CD_2)` // Joining target registration |
| 7 | CALL | `mapper.setFUSV005406SC(bean, dataMap, JPCModelConstant.FUNC_CD_2)` // Joining target registration |
| 8 | CALL | `mapper.setFUSV005407SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2)` // Advance registration |
| 9 | CALL | `mapper.setFUSV005408SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2)` // Order details inquiry / follow-up request |
| 10 | CALL | `mapper.setFUSV005410SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2)` // Option SVC contract agreement meeting |
| 11 | CALL | `mapper.setFUSV005411SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2)` // Option SVC contract <ISP> agreement meeting |
| 12 | CALL | `mapper.setFUSV005412SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2)` // Instruction registration |

**Block 5** — [CALL] CC Mapping Methods (L344-360)

> Calls 7 CC (Common Component) mapping methods for post-processing configuration, data transfer, and validation.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `mapper.setFUSV005401CC(dataMap, this)` // Service IF result data transfer |
| 2 | CALL | `mapper.setFUSV005402CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2, ssoInfoSysid)` // Order issuance condition registration |
| 3 | CALL | `mapper.setFUSV005403CC(beanArray, dataMap)` // Service IF result data transfer |
| 4 | CALL | `mapper.setFUSV005404CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1, ssoInfoSysid)` // Opt-in email reception setting registration |
| 5 | CALL | `mapper.setFUSV005405CC(beanArray, dataMap)` // Mail address addition application (joining check) |
| 6 | CALL | `mapper.setFUSV005406CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1)` // Initial POPID password acquisition |
| 7 | CALL | `mapper.setFUSV005413CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2)` // Family pack guidance necessity judgment |

**Block 6** — [SET] Output Map Creation (L363)

| # | Type | Code |
|---|------|------|
| 1 | SET | `outputMap = new HashMap<Object, Object>()` |

**Block 7** — [CALL] Service Contract Status Setting (L366)

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUWebCommon.setSvcKeiStat(this, dataMap)` // Sets service contract status |

**Block 8** — [TRY-CATCH] Service Invocation (L369-375)

> Invokes the downstream ESB-based business processing pipeline. If a service exception occurs, it is handled by `chkRelationServiceError()`.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `invokeService(paramMap, dataMap, outputMap)` |
| 2 | CATCH | `catch (JCCWebServiceException se)` |
| 3 | EXEC | `chkRelationServiceError(se)` |

**Block 9** — [CALL] Joining Target Check Result Retrieval (L378)

> After service invocation, retrieves the joining target check result to determine if any mail addresses are invalid.

| # | Type | Code |
|---|------|------|
| 1 | SET | `ccResult = mapper.getFUSV005405CC(bean, outputMap)` // Returns "OK" or "NG" |

**Block 10** — [IF] Joining Check Result Validation (L380-384)

> Checks whether the joining target validation returned `"NG"` (not good). If so, displays an error message about unavailable mail addresses.

| # | Type | Code |
|---|------|------|
| 1 | IF | `NG.equals(ccResult)` [-> `NG = "NG"`] |
| 2 | EXEC | `JFUWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKF0420_TW, MLAD_NOT_EQUAL_MSG, ERR_PLACE_MLAD_ERR)` // Sets error: "This mail address cannot be used. Please use a different mail address." [-> `EKF0420_TW` is the error code; `MLAD_NOT_EQUAL_MSG` = {"このメールアドレスはお使いいただけません。別のメールアドレス", "入力"}; `ERR_PLACE_MLAD_ERR` = "mlad"] |
| 3 | RETURN | `return true` |

**Block 11** — [CALL] Customer Information Refresh (L388)

> Refreshes the general customer contract information after service processing.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JFUWebCommon.refreshGenCustKei(this)` |

**Block 12** — [SET] Next Screen Configuration (L391-393)

> Sets the next-screen destination to the confirmation screen (FUW01902).

| # | Type | Code |
|---|------|------|
| 1 | SET | `commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW01902)` [-> `SCREEN_ID_FUW01902 = "FUW01902"`] |
| 2 | SET | `commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW01902)` [-> `SCREEN_NAME_FUW01902 = "メールアドレス追加申込確認"`] |

**Block 13** — [RETURN] Method Exit (L395)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return true` |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `cfm()` | Method | Confirmation processing — invoked when the user clicks the confirmation button on the mail address addition application screen |
| MLAD | Acronym | Mail Address (メールアドレス) — refers to email addresses associated with the customer's service |
| FUW01901SF | Screen ID | Mail Address Addition Application (メールアドレス追加申込) — the confirmation screen for adding new mail addresses to a customer account |
| FUW01902 | Screen ID | Mail Address Addition Application Confirmation (メールアドレス追加申込確認) — the completion/confirmation screen displayed after successful processing |
| SOD | Acronym | Order Data — telecom order fulfillment entity representing a service order |
| SYSID | Acronym | System ID — unique identifier for single sign-on (SSO) authentication across the system |
| SSO | Acronym | Single Sign-On — authentication mechanism allowing customers to access multiple system screens with one credential |
| OP_SVC_KEI | Field | Option Service Contract (オプションサービス契約) — contract information for optional/add-on services (e.g., security, backup) |
| SEIKY_KEI | Field | Billing Contract (請求契約) — contract information related to billing and invoicing |
| SVC_KEI | Field | Service Contract (サービス契約) — the primary internet/service contract for the customer |
| OP_SVC_KEI_NO | Field | Option Service Contract Number — internal identifier for the option service contract |
| SEIKY_KEI_NO | Field | Billing Contract Number — internal identifier for the billing contract |
| SVC_KEI_NO | Field | Service Contract Number — internal identifier for the primary service contract |
| FUNC_CD_1 / FUNC_CD_2 | Constant | Function Code — distinguishes processing variants in the mapper (e.g., registration vs. inquiry) |
| USECASE_ID_FUSV0054 | Constant | Use case identifier `"FUSV0054"` — routes the service invocation to the correct ESB pipeline |
| EKF0420_TW | Constant | Error message code for "mail address unavailable" — displayed when a mail address fails the joining eligibility check |
| FUNC_CODE | Field | Function code passed to SC mapping methods to determine the processing variant |
| SVC_KEI_NO | Field | Service contract number — used to identify the customer's service contract in registration operations |
| MLAD_MAX_CNT | Constant | Bean key for "mail address maximum count" — the maximum number of mail addresses allowed |
| MLAD_STKU_CNT | Constant | Bean key for "mail address obtained count" — the number of mail addresses already obtained |
| MLAD_ADD_PSB_CNT | Constant | Bean key for "mail address addable count" — maximum minus obtained; how many more can be added |
| MLAD_MRYO_CNT | Constant | Bean key for "mail address free count" — free allowance minus obtained; how many more can be added without charge |
| NEXT_SCREEN_ID | Constant | Common info key for setting the next screen identifier |
| NEXT_SCREEN_NAME | Constant | Common info key for setting the next screen display name |
| KIBO_ML_ACCOUNT_1 | Field | Requested mail account 1 — the first requested mail address from the customer |
| CAPA | Field | Mailbox capacity — the capacity of the mailbox for the mail address |
| UPD_DTM_BF | Field | Update timestamp before — the last update datetime of the service contract, used for optimistic concurrency |
| FIX_MLAD | Field | Fixed mail address — the confirmed mail address after processing |
| POP_PWD | Field | POPID password — the password for the customer's POP ID account |
| MLAD | Field | Mail address — the email address being added to the customer account |
| NG | Constant | `"NG"` — indicates a failed/not-good result in the joining target check |
| EKK0011D020CBSMsg1List | Field | Order content approval registration detail list — contains the order approval detail data |
| EKK1091D010CBSMsg1List | Field | Disagree reason detail list — contains reasons for service contract agreement disagreement |
| Option SVC contract <ISP> | Business term | Option Service Contract for ISP (インターネットサービスプロバイダ) — the internet service provider option within the customer's contract |
| Joining target | Business term | The target services/accounts that the customer is applying to join as part of the mail address addition |
| Opt-in email | Business term | Email reception setting for marketing/information emails that the customer consents to receive |
| Family pack | Business term | Bundle of services offered together at a discounted rate (ファミリーパック) |
| Instruction document | Business term | Documents instructing the customer on service usage (指示書) |
| Advance registration | Business term | Registration of advance/provisional service details (進捗登録) |
| Agreement meeting | Business term | Review/confirmation process for service contract terms (契約照会) |
| ESB | Acronym | Enterprise Service Bus — the middleware layer that routes service invocations to the appropriate batch processing components |
| SC (Service Component) | Term | Service Component — a mapping class that prepares data for service invocation |
| CC (Common Component) | Term | Common Component — a utility class that handles cross-cutting tasks like data transfer, validation, and configuration |
| FUSV0054 | SC Code | The service component pipeline code for mail address addition order processing |
| JCCBatCommon | Class | Common batch processing utility — provides `invokeService` for ESB-based service dispatch |
| JCCWebServiceException | Class | Exception class thrown when a web service invocation fails |
| X31SDataBeanAccess | Class | The X31 framework's data bean access class — used to read/write form bean data |
| FUSV0054_FUSV0054OPDBMapper | Class | V-V mapper class that maps between data beans and the ESB service input/output maps |