文章来自:iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw)
[day23] FGL 目录档案处理-处理谁的档案? frontCall
之前在 吸星大法 – IMPORT之 1: 使用extension扩展功能 中,有提到『**可以使用 os.Path套件来处理主机(server)端的路径、档案 **』,例如 DISPLAY os.Path.pwd() 可以打印出程序执行当下的路径。
那,如果整个的过程是『从PC上传指定档案,到主机的指定路径』,那看来现行完成率只有33%
本机的『选档案、上传档案』就要靠其他的套件来执行。
程序运行在主机上,怎么回过头来控制 PC端呢?
Genero执行时,客户端也必须有相应的客户端软件 (client) 虽然主要工作是产生要操作的画面,但也可以控制它做点工作。控制的指令即称为『frontCall前台指令』
所以,只要在前端承接指令的客户端,就具备了接收服务器要求执行工作的机制。如 Windows/MAC/Linux KDE的 GDC、浏览器上的GBC、Android/IOS上的 GMA/GMI 等,都可以执行接收的 frontCALL 指令
可以执行的指令都一样吗?
因为平台限制的关系,每一种 client 能支持的指令是有差异的。浏览器因为管制的最严格,因此运作在浏览器的 GBC缺少的功能最多。例如『开启档案总管、上传』等,都是受限的。
限制的指令种类必须查表之后才会知道。
frontCALL前台指令
FGL列出 frontCall的标准语法
CALL ui.Interface.frontCall( moduleName STRING, functionName STRING,
[ valueList ], [ variableList ] )
- moduleName定义了实现函数的共享库或类路径。
- functionName定义要调用的函数的名称。
- valueList是输入参数的列表。
- variableList是输出参数的列表。 注意哦:此处的输出、输入都是写在括号内的
范例
main
DEFINE info STRING
CALL ui.Interface.frontCall(“standard”,”getenv”, [“OS”], [info] )
DISPLAY info
end main
执行结果:Windows_NT
ui.Interface.frontCall – “standard” 档案处理
功能有:开启PC端档案总管挑选路径(openDir)、挑选档案(openFile)、抓变量(getEnv)、执行shell(execute)、播放声音档(playSound)、存档(saveFile)
ui.Interface.frontCall – “standard” 剪贴簿处理
功能有:加剪贴簿内容(cbAdd)、抓剪贴簿(cbGet)之类的
ui.Interface.frontCall – “standard” 开浏览器
功能有:开指定路径(launchURL)
以上指令可参考 https://4js.com/online_documentation/fjs-fgl-manual-html/#fgl-topics/c_fgl_frontcalls_standard.html
有操作用法,与更详细的细节
这里面播放声音文件(mp3之类的音讯格式) 最为有趣。若希望程序在某些动作出语音的话,还可以搭配 Google TTS python套件,使用 RUN 指令产出对应的语音文件,然后透过 playSound 就可满足念出来的需求。( T100用户可参考 cl_err 中的程序片段)
GDC 与 GBC
我们曾经在 https://ithelp.ithome.com.tw/articles/10259336 介绍过 GDC,也讨论过GDC的除错方式。从Genero 1.0版到3.20版本,GDC使用QT工具,进行各种平台的画面渲染,并协助执行 frontCALL。
但是因应未来软件服务化、跨平台化,Genero套件从 4.00版本起,不再使用QT进行画面渲染,采用浏览器的渲染引擎来进行客户端程序的制作。
所以,除了画面能够跨平台趋向于一致的体验,『许多的 frontCALL都会消失禁用』,例如开启浏览器、客户端档案操作等都消失。但
CALL ui.Interface.frontCall(“standard”, “launchURL”, [ url ], [] ) #开启浏览网页 url要记得换
这是唯一确认必要保留的。
GMA/GMI 移动设备的 frontCALL
到这边应该就可以联想到:移动设备上有许多的装置,如照相机、录音机、扫条形码、抓GPS、传简讯、打电话…这些,就是透过 frontCALL 来驱动的。
移动设备的连结与处理,『后面再专章讨论』