[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机制呈现。


<<:  [Tableau Public] day 14:一起来制作第二张仪表板吧

>>:  @Day14 | C# WixToolset + WPF 帅到不行的安装包 [Windows菜单捷径]

TOGAF 的个 六个组件

[开放组] Open Group (http://www.opengroup.org/)架构框架 (...

[Day 31] 会员登入及登出(三)

今天我们来把登入的功能完成. 会员登入 当验证通过之後, 就可以正常登入, 在登入的时候, 我们会透...

E-Aadhar UIDAI Gov, Status Check Online

An Indian resident needs an Aadhaar to profit from...

30天学会Python: Day 26-一心多用

同步执行 目前写的程序都是一行接着一行一行执行,这种执行的方式叫做 同步执行 print("...

[Day 6] Button

Day 5 进到了网站中最常见需要做功能性的环节 Button <Button variant...