iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0
Software Development

Genero Packages - 可接替4GL的LowCode商業語言系列 第 19

[FGL] 程式開發(2) - 4類6個交談指令-功能選單部分

FGL程式運行時可用的畫面已經可做出來了,但總不能只是拿來 DISPLAY TO 資料,應該要拿來做一些操作吧?

FGL 自然不是只拿畫面來輸出資料的。直接歸納給各位看,編排一個常用的劇情如下:
https://ithelp.ithome.com.tw/upload/images/20210902/20051169bgMAGq81mm.png

上述劇情中的 4 場景,可對應到FGL的『4類』6種交談指令,分類分別為:

  1. 功能選單:直接進行選擇MENU/ 搭配表格資料呈現的功能選擇 DISPLAY ARRAY
  2. 資料輸入:一般表單資料輸入 INPUT/ 搭配表格資料輸入的 INPUT ARRAY
  3. 查詢條件輸入:查詢條件輸入的 CONSTRUCT
  4. 問題答詢:PROMPT

交談指令語法

語法: 指令名稱 ATTRIBUTES(屬性)
控制區塊
END 指令
不同的交談指令具備不同的屬性與控制區塊,如果不存在控制區塊,則可以不用END指令。接下來探究個別的交談指令用法。

MENU選單指令

MENU "顯示MENU的操作說明"
   COMMAND "A.按下說明"   #MENU-COMMAND 是最簡單的結構,後方跟上的是要顯示給操作者看的 "字串"
       #此處寫該功能的程式碼,例如 CALL function,可以做檢查、做功能
       #第一個字元系統會自動轉換為快捷鍵,因此建議不要使用中文字元,而以英文字元並且勿重複,如"A"
   ON ACTION action_id   #MENU-COMMAND 有多語言問題,所以Genero另外推出 MENU-ON ACTION結構
       # action_id 只是一個編號,正式呈現的以 .4ad(action default)檔案設定為準 ( [Resource檔案設定](https://ithelp.ithome.com.tw/articles/10260628) ),包含快捷鍵
       #其餘功能與 COMMAND 控制區塊相同
   COMMAND KEY(F1)       #舊式的快捷鍵寫法,新式的使用 .4ad檔案設定
       #此處寫功能的程式碼
   ON IDLE 5             #若操作人進入此段落後不操做鍵盤、滑鼠 5秒鐘,則觸發此段落
       #此處寫對應處理的程式碼,例如終止或退出程式
   ON TIMER 10           #3.20後提供的新控制區塊,可指定一個定期需要檢是的指令段落
       #此處寫循環檢查的品項,例如是不是已經滿足了『全部的連線都已經超過IDLE設定』之類的消息檢查
END MENU

主要功能如程式碼範例內描述的。另外控制區塊還可以有 BEFORE MENU / AFTER MENU。意思就是在進入MENU前與離開 MENU指令的時候個別要做哪些事情。
特殊形的控制區塊 (如BEFORE MENU/AFTER MENU/ON IDLE等),沒辦法指定多次。

DISPLAY ARRAY

DISPLAY 的語法將會較MENU更加複雜,畢竟MENU的存在只是單純提供功能的選擇;而** DISPLAY ARRAY的存在,除了次要的功能選擇外,最主要的是用來呈現陣列的資料 **。因此使用 DISPLAY 前要先將畫面處理好。也就是OPEN WINDOW中要含有 TABLE或SCROLLGRID 容器。並且欄位數要能對上 (包含phatom)。

當欄位數無法對上時,執行 DISPLAY ARRAY會出現錯誤訊息。(編譯時不會)

DISPLAY ARRAY中控制區塊,MENU有的DISPLAY ARRAY 都有,只是此處改為 BEFORE DISPLAY/AFTER DISPLAY來管理進入前與離開後。

DISPLAY ARRAY g_array TO s_array.* ATTRIBUTES(COUNT=total_rows)  #顯示陣列變數到畫面陣列(s_array)
    #此功能開始出現ATTRIBUTES,可預先指定此指令要表現的行為,COUNT為總顯示行數
    BEFORE ROW     #進入一行時要做的事
       CALL DIALOG.setSelectionMode( "s_array", 1 )  #將此DISPLAY ARRAY設定為多選,0為單選 
       #此處寫功能的程式碼:例如重新確認資料庫刷新畫面 (多人共同編輯資料的時候要做的保護)
    AFTER ROW      #離開一行時要做的事
       #此處寫功能的程式碼

以上是DISPLAY ARRAY初段落常出現的範例。在 ATTRIBUTES 部分,常見的除了 COUNT之外還有

  1. DOUBLECLICK = action-id 指定雙擊的事件要觸發哪一個 action-id,通常會設定為『維護』功能
  2. ACCEPT =TRUE / FALSE 與 CANCEL = TRUE / FASE 這兩組是設定 ACCEPT/CANCEL 兩顆按鈕是否呈現/消失

DISPLAY ARRAY 可以維護TABLE/SCROLLGIRD甚至是 TREE containar,因此還可支援下述區塊,提供不同的畫面使用:

就地維護控制區塊 (TABLE/SCROLLGRID/TREE適用)
理論上已經啟用了交談指令A,若不是同樣處在同一個DIALOG時,是不能再調起另一個交談指令的。但是在Genero 2.50後,開始支持簡易版的就地維護模式,因此在DISPLAY ARRY中創造下列的豁免區塊,可以在下列區塊中啟動INPUT指令進行單行的維護。

  • ON APPEND [ ATTRIBUTES (...) ] #跳到行尾空白行進行維護
  • ON INSERT [ ATTRIBUTES (...) ] #插入一個空白行維護
  • ON UPDATE [ ATTRIBUTES (...) ] #進入指定行進行維護
  • ON DELETE [ ATTRIBUTES (...) ] #觸發刪除所在行,但陣列與database需自行處理
      ON INSERT
         LET li_pos = ARR_CURR()  #確定插入的位置
         INPUT g_arr[li_pos].* FROM record1[scr_line()].*  
           AFTER INPUT
              IF g_arr[li_pos].warehouse_no IS NOT NULL THEN
                 INSERT INTO d_tag(tenantsid,comp_no) VALUES(g_tenantsid,g_comp_no)
              END IF
         END INPUT

依據上面的範例,簡單的說就是觸發後,放入一個INPUT指令,輸入完成(AFTER INPUT)時,順便執行寫入資料庫(INSERT INTO) 的工作。
另外,在範例中,要特別注意:

  1. ARR_CURR( ) 指的是取用現在畫面對應在變數中的哪一筆
  2. SCR_LINE( ) 指的是取用現在停留在畫面的哪一個位置
    兩者意義上還是有差異的,請小心不要混用。

拖拉功能控制區塊 (TABLE/TREE適用)

  • ON DRAG_START ( dnd-object )
  • ON DRAG_FINISH ( dnd-object )
  • ON DRAG_ENTER ( dnd-object )
  • ON DRAG_OVER ( dnd-object )

樹狀伸展控制區塊 (TREE適用)

  • ON EXPAND ( row-index )
  • ON COLLAPSE ( row-index )

上面提到的 ** 『拖拉(drag and drop)』與『樹狀(TREE)開啟(expand)/關閉(collapse)』** 將會由特殊形態的程式開發方法來做介紹說明。

熟悉這些控制區塊,才能夠對應到不同用戶的需求,設計出符合規格的應用程式。其他的交談指令項目待下回分解。


上一篇
[GWS] 服務簡單做-RESTful的開發方式
下一篇
[FGL] 程式開發(3) - 輸入用的INPUT系指令與DIALOG
系列文
Genero Packages - 可接替4GL的LowCode商業語言32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言