2015年2月3日 星期二

讓 TIPTOP 下拉式選單可以動態的顯示

http://4shiun.blogspot.tw/2013/01/tiptop.html

在 Genero Studio 設計 ComboBox 下拉式選單的時候,
通常都是直接在 4fd 檔上面定義固定的 item 項目。
然後再到 p_perlang 修改多國語言顯示的名稱。

提供一個方式可以讓 ComboBox 物件可以隨著其他欄位的變化,來改變下拉式選單的項目。
就是用 ui.ComboBox 的方法。

參考 Genero 的說明文件,ui.ComboBox 提供下式的 Function。
CLASS Method:
1. forname :物件名稱

2. setDefaultInitializer:設定初始的項目

OBJECT Method:
1. addItem(name,text) :增加項目,name 是值,text 是顯示名稱

2. getColumnName():回傳欄位的名稱

3. getIndexOf(name):回傳 name 是在項目的第幾個,沒有回傳 0

4. getItemCount():回傳項目的數量

5. getItemName(index):回傳第 index 個的項目 name 值

6. getItemText(index):回傳第 index 個的項目 text 值

7. getTableName():回傳欄位的 table_name 或是 FORMONLY

8. getTag():回傳欄位的 tag 值

9. getTextOf(name) :回傳 name 是在項目的第幾個的 text 值,沒有回傳 null

10. removeItem(name):刪除名稱是 name 的項目

11. clear():清除所有的項目

範例1:ComboBox 依開啟時可以顯示 1~5 的項目選單
方法1:
1. 在 4fd 檔中的 ComboBox 欄位 Initializer 屬性加上 cb_load 字串

2. 在 4gl 檔中增加一個 Function
    FUNCTION cb_load(combox)
         DEFINE combox ui.ComboBox
         LET combox = ui.ComboBox.forname("ima12")
         CALL combox.clear()
         FOR g_num = 1 TO 5
             CALL combox.addItem(g_num ,g_num)
         END FOR
    END FUNCTION

方法2:
1. 在 OPEN WINDOW 之前加上:
     CALL ui.ComboBox.setDefaultInitializer("cb_load")

2. 同上增加 cb_load 的 Function

範例2:ComboBox 可以隨著某個欄位所選擇的,列出對應的選單
 1. 新增 cb_load 的 Function
    FUNCTION cb_load(combox)
         DEFINE combox ui.ComboBox
         DEFINE l_azf01   LIKE  azf_file.azf01,
                       l_azf03    LIKE azf_file.azf03
         LET combox = ui.ComboBox.forname("ima12")
         DECLARE ima12 CURSOR FOR
            SELECT azf01,azf03 FROM azf_file
                WHERE azf02 = g_ima.ima12
         FOREACH ima12  INTO l_azf01,l_azf03
                 CALL combox.addItem( l_azf01,l_azf03)
         END FOREACH
    END FUNCTION

2. 然後再 INPUT 段的 BEFORE FIELD 欄位的時候,呼叫就可以變化了
    BEFORE FIELD ima12
           CALL cb_load("")

當欄位 ima12 選擇是那一個的時候,跳到 ComboxBox 欄位的時候,
就會帶出不同的下拉式選單

總結:在 Genero 的 ComboBox 有一些可惜的地方,只能在查詢的時候才能夠輸入資料
(要開啟 queryEditabile ),不能提供新增的時候可以輸入選單以外的值。
再來就是如果是用此方式的話,多國語言的功能就不能再維護了,
如果是帶 Table 的資料多國語言就沒問題,但是是自定的話,當然也可以用 p_ze 來定義啦~~~
要注意的另一點,如果下拉式選單因其他欄位的變化而造成值是相同但是顯示的名稱不同,
再查詢的時候就要再多判斷要帶出來的顯示名稱,並上下筆做查詢的時候也要判斷。

沒有留言:

張貼留言