文章来自:iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw)
[day12] IMPORT之 1: 使用extension扩展功能
转换为Genero后,FourJs’ 为了扩展整体程序语言,令他可以执行更多不一定与数据库相关的功能,往独立正常的套件发展,即已开放汇入 IMPORT 的指令。
语法:在 4GL 段 function 或设定前,定义 IMPORT [语言别] 套件名
不须标注语言为:C 。需特别标注:JAVA / FGL。其他语言 extension暂时未开放引入。
[罕用] IMPORT Cextension
Genero套件是由Native C重构。原本就可读取 C开发出的 .so ( .dll) 使用者自定义义延伸包。
依据文件要求:
C 扩展必须作为共享库(.DLL或 .so)存在并且是可加载的(必须正确设置环境变量)。与IMPORT指令一起使用的 C 扩展模块 不必链接到fglrun:运行时系统动态加载依赖的 C 扩展模块。
此意涵为:若开发完成后,用户自行定义的 .so 档应该自行复制放入 $FGLDIR/lib 提供连结。当 FGL 套件更新时务必随同搬移或复制。
另外,为求方便,若开发的扩展模块命名为『userextension』(链接库为 userextension.so) 则运行 fglrun 的时候会自动附加,不必特别使用 IMPORT userextension 这样的方式带入。
C 扩展撰写时限制多,大多数状况并不会特别使用,此处带过不加范例。
###[以下常用] extend packages ###
既然可以,为什么 Genero 不先帮忙写一些常用、常见的工具协助用户呢?
Genero 2.X 版本开始,套件中提供预先完成的常用功能 (extend packages),再依照常用程度分为两类:内置包 (built-in packages,不需要使用IMPORT汇入就可使用),扩展包 (需要 IMPORT)
请注意:以下将会以现行发布版本 Genero 3.20为准,
Genero 1.X 版本无 extend package 与IMPORT非 C extension功能支持
Genero 2.50 后版本支持大部分功能。各版本详细支持情况请查阅Genero Studio中的求助文件或在线文件。
base.Application
分类:不需要IMPORT可直接使用
功能:可查阅程序名称、当下FGL系环境变量值等基础配置
Method List
特别注意:
1.base.Application.getStackTrace() 很好用,当程序非常复杂,层层迭迭时,可以直接
DISPLAY base.Application.getStackTrace()
可以把从 MAIN 执行到本处的 4GL Module堆栈呈现出来。便利于查找问题使用。
呈现结果如
#0 sorry_stack() at sorry.4gl:119
#1 helloworld_again_err() at helloworld_again.4gl:870
#2 helloworld_again_fill() at helloworld_again.4gl:3675
#3 helloworld_query() at helloworld.4gl:11296
#4 helloworld_dialog() at helloworld.4gl:3320
#5 main() at hello.4gl:1246
2. base.Application.reloadResources() 重新加载资源文件(Resource Files,尤其指42s档案) 功能为 3.20 后提供
base.Channel
分类:不需要IMPORT可直接使用
功能:可用来读取/写入档案数据(openFile),可读取执行指令时呈现在背景画面上的讯息(openPipe)与相关操作
Method List
特别注意:
- 简易范例
- 读取档案前,一定要设定 setDelimiter(“分隔符”) ,一般普通档案设定为 “” 即可
base.SqlHandle (3.20以上提供)
分类:不需要IMPORT可直接使用
功能:可以用『动态的方法』来创造SQL以及执行。
Method List
特别注意
- FGL 3.20套件 DEMO 中有一个 dbbrowser表格数据查询器,后续将会专章解说该范例
base.StringBuffer
分类:不需要IMPORT可直接使用
功能:string 变量型态虽然可以无上限使用,但若资料量『可能大于300K』时建议转用StingBuffer进行字符串处理。如整批取替代、搜寻等字符串处理等功能 (超过300K时使用此型态效能较佳)
Method List
base.StringTokenizer
分类:不需要IMPORT可直接使用
功能:字符串中若有 “a/b/c/d/e… ” 等元素用同样的样式 (pattern) 时,要做拆解或组合用。例如SQL中的字段列表或程序路径的切节等等。
Method List
特别注意
os.Path
分类:需要 IMPORT os
功能:处理与文件系统交互的所有事件。如切换目前所在路径,查看路径讯息、查看档案讯息、设定属性等等。可搭配channel做到『切换到指定路径下写入指定内容』之类的工作
Method List
特别注意:
- 浏览指定路径目录结构的范例
- os.Path 中常用的是 os.Path.join 组合路径
util.Strings
分类:需要 IMPORT util (大部分功能仅在Genero 3.00以上版本有效)
功能:提供字符串以 Base64 编码或译码功能,网址列字符串(如含有特殊字符)的URL编/译码功能
Method List
特别注意
- Genero 进阶的 Base64或其他如AES256等加密方式,归属于安全包(IMPORT Security)的范围
util.Math
分类:需要 IMPORT util (大部分功能仅在Genero 3.00以上版本有效)
功能:提供包括取随机数之类的一大堆工程级数学函数 (pi,sin,cos,log,角,度,….)
Method List
util.JSON
分类:需要 IMPORT util (大部分功能仅在Genero 3.00以上版本有效)
功能:提供Genero RECORD和 JSON字符串互转的机制,在操作 WEB Service或API 时需要使用
Method List
util.JSONObject
分类:需要 IMPORT util (大部分功能仅在Genero 3.00以上版本有效)
功能:JSON套件的扩展。当需要对接的 JSON 具有复杂的结构时,可利用此对象承接,可直接在对象内操作取/改值,结构调整异动等事项
Method List
util.JSONArray
分类:需要 IMPORT util (大部分功能仅在Genero 3.00以上版本有效)
功能:JSON字符串中若出现如 [123,546,”abc”,”def”,”xyz”] 的数组形式,可用此对象进行组件的操作
Method List
除上列较为基本的项目外,还有 COM网页通讯包、XML处理包、Security安全包等提供。相关资源后续进行个别探讨。