---
# System prepended metadata

title: Menu Item Issue
tags: [Gateweb]

---

###### tags:`Gateweb`

Menu Item Issue
===

當前環境
---
#### 當前環境的menuItem是由以下資料決定的
* companyType (primary)
* role 
* businessNo 
* transferType

#### 當前的問題
以CompanyType為主的選單分類(統一將所有ct1相關的設定放到ct1_config中)
以簡單情境舉例，這三個維度都各有二種資料，他應該會有幾種組合
| companyType | role |function
| -------- | --------  |--------
| ct1     | r1         | f1
| ct1     | r2         | f1
| ct2     | r1         | f1
| ct2     | r2         | f1
#### 情境-新增一個F2給R2
有幾個CompanyType擁有r2的權限，就要新增幾次(ct1+ct2)
| companyType | role  |function
| -------- | ---------- |--------
| ct1     | r1         | f1
| ct1     | r2         | f1
| **ct1**     | **r2**         | **f2**
| ct2     | r1         | f1
| ct2     | r2         | f1
| **ct2**     | **r2**         | **f2**

#### 情境-把F1從R2中移除
有幾個CompanyType擁有r2的權限，就要移除幾次(ct1+ct2)
| companyType | role  |function
| -------- | ---------- |--------
| ct1     | r1         | f1
| ~~ct1~~     | ~~r2~~         | ~~f1~~
| ct1     | r2         | f2
| ct2     | r1         | f1
| ~~ct2~~     | ~~r2~~         | ~~f1~~
| ct2     | r2         | f2

困難的地方在於，R2的權限宣告散佈在各個CompanyType中，因此新增及移除的作業都相當麻煩

#### 情境-單純給單一統編F3
新增的情況相對簡單(假設同公司不會有不同的companytype)
| companyType | role  |businessNo|function
| -------- | ---------- |------|--------
| ct1     | r1         |       | f1
| ct1     | r2         |       |f2
| ct2     | r1         |       |f1
| ct2     | r2         |       |f2
| **ct2**     | **r2**        |   **b1**    |**f3**

#### 情境-單純移除單一統編F1
| companyType | role  |businessNo|function
| -------- | ---------- |------|--------
| ct1     | r1         |       | f1
| ct1     | r2         |       |f2
| **ct1**     | **r1**         |   **b1**    | **f2**
| ct2     | r1         |       |f1
| ct2     | r2         |       |f2
| **ct2**     | **r1**        |   **b1**    | **f2**
| ct2     | r2         |   b1    |f3

因為b1不能再使用原來ct1跟舊的r1,r2路線，因為他不一樣了
為了這個需求要新增的數量為companyType的數量(ct1+ct2)
又因為組合散落在各個CompanyType中，因此很難找出實際上有多少
要一個一個新增又更困難

#### 修正想法
既然都是增加及刪除功能，那就以功能本身為主
若我們改為使用一個功能一個選單檔案，則在這四個情境中，function的檔案都是用到同一個
因為是在同一個地方定義Role及comapnyType能否看到
即便是比較複雜的案例，f2出現2次也只是同一份jsp的二行而已
而不會是不同jsp(ct1,ct2)的各別一行

即便是在增加維度的案例下也是同一份檔案而已
#### 情境-加入transferType3並讓這些案例擁有F4
| companyType | role  |businessNo|transferType|function
| -------- | ---------- |------|----- |--------
| ct1     | r1         |       |      |f1
| ct1     | r2         |       |      |f2
| ct1     | r1         |   b1  |      |f2
| ct1     | r1         |       |   t3 |f4
| ct1     | r2         |       |   t3 |f4
| ct2     | r1         |       |      |f1
| ct2     | r2         |       |      |f2
| ct2     | r1         |  b1   |      |f2
| ct2     | r2         |   b1  |      |f3
| ct2     | r1         |       |   t3 |f4
| ct2     | r2         |       |   t3 |f4

表格中的F4出現了四次，但那只代表了在F4中的4行程式而已
不會對其它地方有影響
