iT邦幫忙

2021 iThome 鐵人賽

DAY 13
1
Software Development

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

[FGL] 4GL程式的資源檔Resource file體系

https://ithelp.ithome.com.tw/upload/images/20210913/2005116925W8S6jqFj.png

也學過 OPEN WINDOW了,可是為什麼 T 產品可以有TOOLBAR和 TOPMENU 我這邊就沒有?

Genero FGL支援一般Windows的操作,可以在程式畫面的上方出現下拉式選單(TOPMENU)。或在左、右或上方提供TOOLBAR。
這些曾經在 OPEN WINDOW 章節提到過增加一個section就可做出來,但是若要綁定在畫面檔內,未免嫌過於複雜。因此Genero提供對應的資源檔,可以做外部的設定,並且在程式運行的過程中再做讀入。

資源檔案類型

  • TOPMENU設定 (4tm)
  • TOOLBAR設定 (4tb)
  • 功能按鍵翻譯與快捷鍵設定檔Action Default (4ad)
  • 畫面控件widget翻譯檔 (str -> 42s)
  • 畫面風格STYLE設定 (4st) --本篇不討論,後續專章討論--

以上從命名就可以理解個別的用途為何,下方對於個別特殊處,與程式中如何調用的方式進行說明。

TOPMENU

格式語法

<?xml version='1.0' encoding='UTF-8'?>
<TopMenu>
  <TopMenuGroup text="第一格下拉功能">
    <TopMenuCommand name="update" text="更新" comment="說明:這是更新"/>
    <TopMenuSeparator />
    <TopMenuCommand name="view" text="查看" comment="說明:這是查看"/>
  </TopMenuGroup>
  <TopMenuGroup text="第二格下拉功能"/>
</TopMenu>

4tm的檔案格式採用xml格式進行配置,請特別觀察,此處的功能要設定為『使用者想看到的字』,沒有任何轉換空間。也就是說:當系統有支持多語系的需求時,必須要準備多套版本,並且於存取 4tm 檔案前確認好需調用的語言為何。

TOOLBAR

格式語法

<ToolBar name="tb_system" style="toolBar_system" buttonTextHidden="1">
  <ToolBarItem name="accept" />
  <ToolBarItem name="cancel" />
  <ToolBarSeparator/>
  <ToolBarItem name="home" />
</ToolBar>

TOOLBAR的語法因缺少XML標頭,所以不能算是一個完整的XML檔案。此處從範例中可看到 toolbar 可以讀取 STYLE 風格的設定,也能夠自行定義。

注意此處只有『功能編號』,並不帶上翻譯後的文字說明,所以 4tb 沒有語言屬性,不需要為了多種語言準備多份。

4tb的語言資料靠 Action Defaults提供。

『buttonTextHidden』是控制圖片按鈕下方的 Action說明是否顯現 (也就是GDC預設的『啟用文本』功能),若設定為 1 則是 hidden(隱藏),設定為 0 是顯現。(本設定僅限初始畫面有用,第二次執行時以留存GDC的上次操作設定為預設值。

Action Defaults功能按鈕翻譯檔,簡稱4ad

格式語法

<?xml version='1.0' encoding='UTF-8'?>
<ActionDefaultList>
  <ActionDefault name="accept" text="新增" image="add-icon.png" comment="註解"/>
  <ActionDefault name="cancel" text="刪除" image="act_delete32.png" comment="註解"/>
  <ActionDefault name="home" text="回家" image="Gas_icon.png" comment="註解"/>
  <ActionDefault name="test_for_hello" text="驗證HELLO" image="act_update32.png" comment="註解"/>
</ActionDefaultList>

在 4ad 檔案中,可以設定每個Action ID對應的文字、圖片、註解、以及快捷鍵。本檔案必定有多語系屬性。

Strings (str與42s,畫面元件翻譯檔)

與上述的功能翻譯檔都是做多語系並存時翻譯用的。但此檔案針對畫面上的所有控件提供翻譯資源,因此作法稍有不同。

  • STEP1 準備多語言原始檔案,如
"page_1" = "基本資料"
"gzza001" = "程式編號"
"gzza001" = "程式編號"

利用純文字檔案進行編輯,繪製畫面 (PER/4FD)時,設定的 TEXT代號放在左側,呈現的字眼放在右側,逃逸字元為反斜線

  • STEP2 使用 fglmkstr 進行轉檔:需要轉為 XML 格式才能使用。每個版本格式『據說』會有出入(但目前狀況是從 Genero 1.0->4.0都還一致),因此需使用 fglmkstr 進行轉檔

完成後即可進行調用。

注意:Genero 3.10 之前的版本,讀取42s檔只有一次機會,因此要將所有可能出現的畫面元件資料收齊。此限制在 Genero 3.20後取消。

讀入資源檔檔案

TOPMENU,TOOLBAR等資源檔都已經到位了,但各有不同的存取方式。接下來從執行的角度逐一讀取資源檔。

FGLRUN 啟動時讀取 42s 檔案

多語言的資源檔是 Genero套件中最基本設定的部分。因此安排在 FGLRUN啟動時,系統即會從

  1. 當前執行目錄
  2. FGLRESOURCEPATH指定路徑下
    尋找與執行 42m/42r 同檔案名稱的 42s檔,一併讀取。

例如,FGLRUN hello.42m 此時FGLRUN會一併讀取 hello.42s 檔案。

因此,T100 平台會在程式執行前 (cmdrun) 就動態配置出,一個存放 "作業名稱.42s" 的 RESOURCEPATH 路徑,存放翻譯用的 42s 檔案,滿足不同語系的翻譯需求

重讀
在 Genero 3.20以上的套件,支持了重讀 (append)語言資料的功能。此舉可有效減少事前準備的難度。畢竟若要將這個作業中所有的『可能開啟的畫面』都鉅細靡遺的『事先準備資料』,以應付所有執行情況,實行上難度很高。故發展出此需求。
此方法只會影響到語言資料,對於後續如 TOPMENU/TOOLBAR等項目無影響。

語法 CALL base.Application.reloadResources("新檔案路徑")

OPEN WINDOW後利用 FORM物件加載

例如 TOOLBAR/TOPMENU 這些資源都是跟隨著 FORM 物件,所以必須使用 FORM 的方法 (Method) 進行綁定與調用。

下面透過案例來學習:

MAIN
  DEFINE who  VARCHAR(20)
  DEFINE w    ui.Window
  DEFINE f    ui.Form

  OPEN WINDOW w WITH FORM "hello"
  LET w = ui.Window.getCurrent()
  LET f = w.getForm()
  CALL f.loadToolBar("hello")    #讀取TOOLBAR 此方法不可帶附檔名
  CALL f.loadTopMenu("hello")    #讀取TOPMENU 此方法不可帶附檔名
  CALL f.loadActionDefaults("hello") #讀取4ad 此方法不可帶附檔名

  DISPLAY ARG_VAL(1) TO formonly.who
  INPUT who FROM formonly.who
     ON ACTION test_for_hello    #4ad用在此處 (注意TOPMENU/TOOLBAR同名自動收入)
     ON ACTION exit
        EXIT INPUT
  END INPUT
END MAIN

在上方案例中,畫面呈現出來後,使用 getCueernt Window 方式取得物件,在往下抓Form,就可以透過 built-in 的 Form 方法進行資源檔的取用,分別是 4tb/4tm/4ad 檔案。執行成果如下圖

https://ithelp.ithome.com.tw/upload/images/20210914/20051169oj6yHTMKD0.png

此範例中要注意的:在4GL中寫出的 ON ACTION功能,若有與 TOOLBAR/TOPMENU 相符,則會被自動收入。如果沒有相符,則會顯示在『右側的 Ring MENU』區塊。

[注意] 上述方法是透過 FORM物件讀入,已可滿足絕大多數用途。但若需要滿足多 FORM/Window 共用,則需使用 ui.Interface 層級進行讀入

T100 ERP產品的功能,在程式中設定後,是透過 azzi903再創出 4tm/4ad 檔案。然後再回歸 FGL機制呈現。


上一篇
[FGL] 吸星大法 - IMPORT之 1: 使用extension擴展功能
下一篇
[FGL] 吸星大法 - IMPORT之 2: 帶入JAVA或其他FGL套件
系列文
Genero Packages - 可接替4GL的LowCode商業語言32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言