程式資訊
- 程式 ID:
ZCOND1 - 所屬子系統:A.系統資料
- 狀態:stable
預設條件值¶
功能簡介¶
「預設條件值」用來維護瀏覽查詢視窗裡的預設條件配方。系統很多單據的瀏覽/查詢視窗(例如挑客戶、挑品號、挑訂單)上方都有一個「預設條件」下拉,選了之後條件列會自動填好——那些條件列的內容就是在這支表單裡定義的。
每一筆主檔代表「某個程式別 × 瀏覽辨識碼」底下的一組預設條件(一個配方),底下的明細就是這組配方要套用的條件式清單:每一列指定一個 欄位 × 運算子 × 值。
適合系統管理員或顧問在導入、調整查詢介面時使用。本表單只負責維護條件配方的內容;配方框架(程式別、類別、瀏覽辨識碼)本身是在上一層的 自訂條件別 建立後帶進來的,所以本頁主檔欄位多為唯讀,實際可編輯的是下方明細。
與 TWORKZCOND1 的關係
本表單(ZCOND1)與 預設條件值(TWORK 版) 共用相同的程式碼邏輯與資料結構,兩者編號同為 A-110。差別在於套用對象不同:ZCOND1 對應 自訂條件別(ZCOND,使用者層級),TWORKZCOND1 對應 TWORKZCOND(系統層級樣板)。操作方式兩者完全一致。
前置需求¶
- 權限:A.系統管理 →
A-110 預設條件值的瀏覽/修改/刪除權限。本程式在系統中停用新增(ProgramPermissionSetting將 ZCOND1 設為ProgramAllowAdd = false),新的配方框架請到 自訂條件別 建立。 - 基礎資料:本表單的下拉與明細欄位需要下列資料先到位——
| 資料 | 影響什麼 |
|---|---|
| 自訂條件別(ZCOND,含程式別、瀏覽辨識碼、類別) | 提供本表單主檔的配方框架;主檔的編號/程式別/類別/瀏覽辨識碼都從這裡帶來 |
| 瀏覽欄位定義(各程式別的可查欄位) | 明細 欄位說明 下拉的可選清單;沒有定義就只能用 Model 預設欄位 |
| 運算子對照(系統內建 A~S 共 19 種) | 明細 運算子說明 下拉的可選清單 |
| 多語系顯示名稱(語言版本) | 主檔 顯示說明 與欄位/運算子的顯示文字,依語言版本翻譯 |
小技巧
若不確定某個程式別有哪些可查欄位、或某組配方框架是否存在,先到 自訂條件別 確認程式別 × 瀏覽辨識碼 已建立、並維護過欄位清單,再回來這支補條件式。
操作步驟¶
本表單為主檔 + 明細結構:上方一塊主檔(唯讀),下方一張條件式格線(可編輯)。
- 用工具列的查詢/翻頁功能定位到要維護的配方(一筆主檔 = 一組程式別 × 瀏覽辨識碼的預設條件)。
- 定位後,上方主檔顯示這組配方的 編號、程式別、類別、顯示說明、瀏覽辨識碼 與 語言版本(皆唯讀)。系統會自動依主檔的程式別 + 瀏覽辨識碼 + 語言版本,把可選的欄位清單與運算子清單載入下方兩個下拉。
- 在下方格線維護條件式:
- 欄位說明:從下拉挑要套用條件的欄位(下拉顯示中文欄位說明,實際存的是欄位編號)。
- 運算子說明:挑比較方式(等於、不等於、大於、Between、Contains…)。
- 依運算子填 值1(單值),需要區間(如 Between)時再填 值2;值3 供較長字串使用。
- 視欄位型態填 物件1/物件2(搭配的物件設定)與 遮罩1/遮罩2(輸入格式遮罩)。
- 要刪掉某一列條件,把該列的欄位說明清空(欄位編號 = 0),存檔時系統會自動把該列視為刪除。
- 按工具列
儲存。存檔時系統會把主檔的程式別、瀏覽辨識碼、編號自動寫回每一列明細(使用者不需手動輸入),確保明細掛回正確的配方。
注意
主檔的編號/程式別/類別/瀏覽辨識碼在本表單是唯讀的。要新增一組「全新的配方框架」(新的程式別 × 瀏覽辨識碼),請到 自訂條件別 建立;本表單只負責填那組框架底下的條件式內容。
欄位說明¶
主檔(唯讀)¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 編號 | ✔(系統帶) | 此組預設條件配方的代號,唯讀,由配方框架帶入 |
| 程式別 | ✔(系統帶) | 此配方套用的單據別(程式),唯讀 |
| 類別 | — | 配方的分類碼(對照 ZCOND 多語系翻譯成顯示說明),唯讀 |
| 顯示說明 | — | 系統依「類別」翻譯出的中文說明文字(ZCOND 語系字典),唯讀、自動產生 |
| 瀏覽辨識碼 | — | 下拉值 B 或 D(瀏覽類別),唯讀顯示 |
| 語言版本 | — | 此配方對應的語言版本,決定欄位/運算子下拉與顯示說明的語系 |
明細(條件式,可編輯)¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 序號 | ✔ | 條件列的排列序號 |
| 欄位說明 | ✔ | ComboBox,顯示中文欄位說明、實際儲存欄位編號;清空(欄位編號 = 0)代表刪除此列 |
| 運算子說明 | ✔ | ComboBox,顯示中文運算子說明、實際儲存運算子編號(A~S,見下方說明) |
| 值1 | 視運算子 | 條件比對的主要值(最長 254 字) |
| 值2 | 視運算子 | 區間運算子(如 Between)的第二個值(最長 40 字) |
| 值3 | — | 供較長字串條件使用(最長 999 字) |
| 物件1/物件2 | — | 搭配欄位的物件設定(最長 60 字) |
| 遮罩1/遮罩2 | — | 輸入格式遮罩(最長 40 字) |
運算子代碼對照
運算子下拉的選項是系統內建的 19 種,存的是單一字母代碼,顯示文字會依使用者語言翻譯:
A 等於、B 不等於、C 大於、D 大於等於、E 小於、F 小於等於、G 開頭為、H 結尾為、I 包含、J 不包含、K 在清單內、L 不在清單內、M 為 Null、N 不為 Null、O 為空、P 不為空、Q 介於(Between)、R 採用此條件、S 不採用此條件。
欄位連動與附加功能¶
這一節說明本表單在背後實際會做的事,全部來自程式碼(Zcond1ViewModel、Zcond1Save、Twork_sys_vw_zcond_defineSource、BrowseInitialzation)。
- 翻頁/定位主檔後,自動載入下拉清單(
AfterMoverRecord):每當你切換到一筆主檔,系統會:- 依主檔的「類別」呼叫語系字典,產生唯讀的顯示說明(
SetDisplayDescription→ZCOND翻譯)。 - 以主檔的 程式別(單據別)+ 瀏覽辨識碼 + 語言版本 為條件,透過
BrowseInitialzation撈出該程式別可查的欄位清單(依語言版本過濾)與運算子清單。 - 把這兩份清單塞進每一列明細的下拉資料來源(
ColumnList/SymbolNoList),所以換一筆主檔,明細的欄位/運算子可選項也會跟著換。
- 依主檔的「類別」呼叫語系字典,產生唯讀的顯示說明(
- 欄位說明下拉連動欄位編號:明細的欄位下拉綁的是
欄位編號Binding。選一個欄位時,系統會把對應的欄位編號寫入該列,並同步更新該列的欄位說明文字;若選到的編號不在清單內,欄位說明會清空。 - 運算子說明下拉連動運算子編號:同理,運算子下拉綁
運算子編號Binding,選擇後寫入運算子編號、同步更新運算子說明文字(運算子欄位的更新時機為失焦LostFocus,欄位下拉則為即時PropertyChanged)。 - 存檔時自動把主檔鍵寫回明細,並判定刪除(
Zcond1Save.HandleDataBeforeEndEdit):按儲存的瞬間,系統逐列檢查明細——- 若該列 欄位編號 = 0(你把欄位清空了)→ 標記為刪除(
增刪修 = D)。 - 否則 → 自動把主檔的單據別、瀏覽辨識碼、編號蓋寫到該列,確保明細正確掛回這組配方。所以使用者不需要、也不應該自己去填這幾個鍵欄位。
- 若該列 欄位編號 = 0(你把欄位清空了)→ 標記為刪除(
- 刪除主檔的條件:主檔在沒有編號(編號為空白)時才允許走刪除流程(
NeedDeleteFunction);明細列則以「欄位編號 ≤ 0」作為可刪除的判定。 - 這份資料會被瀏覽視窗讀回去用:本表單維護的條件式,正是各瀏覽/查詢視窗「預設條件」下拉的內容來源。
BrowseInitialzation會依程式別 + 瀏覽辨識碼讀回這些 define 列,自動把查詢視窗的條件列預先填好(含欄位、運算子、值1、值2)。換句話說,在這裡存好的條件,下次打開對應的瀏覽視窗就會看到並可直接套用。
新增整組配方目前的入口
本表單聚焦於「維護既有配方框架底下的條件式」。要建立全新的程式別 × 瀏覽辨識碼框架,入口在 自訂條件別(ZCOND);本表單的主檔鍵欄位為唯讀,無法在此直接新開一組程式別框架。
常見問題¶
明細的欄位說明/運算子說明下拉是空的、選不到東西?
下拉清單是依目前定位的主檔的「程式別 + 瀏覽辨識碼 + 語言版本」即時載入的。若下拉空白,通常是:(1) 還沒定位到任何主檔;(2) 該程式別在 自訂條件別 還沒維護過可查欄位清單(此時只會退回 Model 預設欄位);(3) 語言版本對不上。先確認主檔已定位、且該程式別的欄位定義存在。
我在明細填的「值」存了,下次打開瀏覽視窗卻沒套用?
請確認該列有選欄位說明且欄位編號不為 0——欄位編號為 0 的列在存檔時會被當成刪除整列丟掉。另外存檔後該列的程式別/瀏覽辨識碼/編號是由系統自動蓋寫的,若主檔定位錯誤,條件會掛到別組配方上。
顯示說明欄是空白或顯示成代碼?
顯示說明 是系統用「類別」去 ZCOND 語系字典翻譯出來的,並非手動輸入。若顯示空白或仍是原始碼,代表該類別在對應語言版本下沒有翻譯資料,請補上該語系的對照後重新定位主檔。
為什麼主檔的編號、程式別改不了?
這是設計如此。本表單只維護「配方框架底下的條件式內容」,框架(程式別 × 瀏覽辨識碼 × 編號)本身在 自訂條件別 建立與維護,因此在本頁皆為唯讀。
ZCOND1 跟 TWORKZCOND1 有什麼不同?要維護哪一個?
兩者程式邏輯完全相同,差別只在套用對象:ZCOND1 對應使用者層級的 自訂條件別,TWORKZCOND1 對應系統層級樣板 TWORKZCOND。維護你實際使用的那一層即可,操作方式一致。
相關功能¶
- 自訂條件別(ZCOND,本表單主檔的配方框架來源)
- 預設條件值(TWORK 版)(TWORKZCOND1,本表單的系統層孿生)
- TWORKZCOND(系統層級條件樣板)
- 權限設定(控管本表單的瀏覽/編輯權限)
- 語言設定(維護顯示說明與欄位/運算子的多語系翻譯)
需補截圖清單
以下截圖待功能 runtime 驗收後補拍(放 docs/A-System/images/):
zcond1-step1.png— 主檔(唯讀)+ 下方條件式明細格線的整體版面zcond1-step2.png— 明細「欄位說明」下拉展開(顯示某程式別的可查欄位清單)zcond1-step3.png— 明細「運算子說明」下拉展開(A~S 運算子)