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

[day12] IMPORT之 1: 使用extension扩展功能

后端代码 bron1984 1592浏览

文章来自: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
特别注意:

  1. 简易范例
  2. 读取档案前,一定要设定 setDelimiter(“分隔符”) ,一般普通档案设定为 “” 即可

base.SqlHandle (3.20以上提供)

分类:不需要IMPORT可直接使用
功能:可以用『动态的方法』来创造SQL以及执行。
Method List
特别注意

  1. 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
特别注意

  1. 拆路径的范例

os.Path

分类:需要 IMPORT os
功能:处理与文件系统交互的所有事件。如切换目前所在路径,查看路径讯息、查看档案讯息、设定属性等等。可搭配channel做到『切换到指定路径下写入指定内容』之类的工作
Method List
特别注意:

  1. 浏览指定路径目录结构的范例
  2. os.Path 中常用的是 os.Path.join 组合路径

util.Strings

分类:需要 IMPORT util (大部分功能仅在Genero 3.00以上版本有效)
功能:提供字符串以 Base64 编码或译码功能,网址列字符串(如含有特殊字符)的URL编/译码功能
Method List
特别注意

  1. 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安全包等提供。相关资源后续进行个别探讨。

转载请注明:赫非域 » [day12] IMPORT之 1: 使用extension扩展功能