概述

本文說明 Genero 的動態對話框(Dynamic Dialogs)技術,讓開發人員能夠撰寫在編譯時期無需預知資料結構的通用程式碼。

解決的核心問題

動態對話框解決了重複撰寫程式碼的問題——開發人員過去必須針對不同欄位名稱或欄位數量,撰寫多個結構類似的 INPUTDISPLAY ARRAY 陳述式。文章以 query_win() 函式為例,說明過去必須針對每種可能的欄位數量使用獨立的 CASE 陳述式。

核心概念

動態對話框的實作分為兩個階段:

第一階段:定義

使用 ui.Dialog.createInputByName() 等方法建立並設定對話框,並透過 addTrigger() 加入觸發條件。

第二階段:執行

執行一個 WHILE 迴圈,呼叫 nextEvent() 來回應使用者操作。

欄位陣列需要使用動態陣列結構,每個欄位包含名稱(name)和資料型別(datatype)成員。

實作細節

主要方法包括:

  • setFieldValue()getFieldValue():用於資料操作
  • getQueryFromField():用於 CONSTRUCT 對話框
  • setCurrentRow():用於陣列操作
  • nextField():用於欄位導覽

實際應用範例

fgl_zoom 程式庫透過 _createConstructByName__createDisplayArrayTo_ 等函式展示了動態對話框的應用。這些函式建立了可重複使用的查詢與顯示元件,能處理各種 SQL 結果集,而無需為每種情況撰寫獨立的對話框程式碼。

文章最後指出,雖然通用程式碼看起來較為複雜,但它消除了重複性,並提升了整個應用程式的可維護性。

原文:https://4js.com/ask-reuben/ig-24/  ·  有任何 Genero 技術問題或翻譯疑問,歡迎來信 support@t100.app