最新消息:本站持续更新中,请注意添加收藏夹。搜索关键词时,多换一个同义词。比如要搜索界面,可以尝试页面,画面,PER档等词汇。善于搜索,将大大提高你的查找效率。

[day19] FGL程序开发(2) – 4类6个交谈指令-功能选单部分

后端代码 bron1984 1834浏览

文章来自:iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw)

[day19] FGL程序开发(2) – 4类6个交谈指令-功能选单部分

FGL程序运行时可用的画面已经可做出来了,但总不能只是拿来 DISPLAY TO 数据,应该要拿来做一些操作吧?

FGL 自然不是只拿画面来输出数据的。直接归纳给各位看,编排一个常用的剧情如下:
图示 描述已自动生成

上述剧情中的 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)』** 将会由特殊形态的程序开发方法来做介绍说明。

熟悉这些控制区块,才能够对应到不同用户的需求,设计出符合规格的应用程序。其他的交谈指令项目待下回分解。

转载请注明:赫非域 » [day19] FGL程序开发(2) – 4类6个交谈指令-功能选单部分