文章来自:iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw)
[day14] IMPORT之 2: 带入JAVA或其他FGL套件
前一篇IMPORT中,提到Genero Package中有提供一些预先制作的功能套件可用。
可是面对层出不穷的新功能,Genero势必不可能面面俱到。一来得靠其他的 Genero用户支持。或是靠其他语言的特性。因此IMPORT 指令额外还可支持:
- 直接汇入现存的 42m 档案,扩增用途
- 直接汇入现存的 JAVA-JAR 档案,扩增用途
IMPORT JAVA
不可否认的,虽然JAVA开发是较为复杂的,但是运用JAVA群体仍旧广大。许多 lib 或功能包也都有提供 JAR 档下载运用。因此 FGL 开放直接调用 JAR 中的变量、function 让 FGL 可调用也是很正常的事。
小程序直接开发
Hello World再现,撰写一个小型的 java 程序,命名为 Helloworld.java
public class Helloworld {
public String init(){
return “hello”;
}
}
提供一个function init,被呼叫的时候回传一个字符串 “hello”
使用的环境利用 java -version 可得知为 openjdk version “1.8.0_232”
(建议在1.8以上即可,1.6版本过低,建议更新)
存盘后使用 ** javac Helloworld.java ** 编译出 Helloworld.class档案
使用 jar -cvfm Helloworld.jar MANIFEST.MF Helloworld.class 编译出 jar 檔
最后使用 **export CLASSPATH=$PWD/Helloworld.jar:$CLASSPATH **指令,将此 jar 档案加入 CLASSPATH 搜寻路径中,以便编译程序搜寻并完成连结
使用package
如果要串接的 function 比较多,应该要用有结构化的方式进行有规则的 source调整与存放
- STEP1 java package的目录阶层
- STEP2 在路径上开发Hellopkg.java
package com.dsc.svms.hello;
public class Hellopkg {
public String init(){
return “hi in pkg”;
}
}
从上方的Hellopkg.java 范例中可以看到,初始时就要宣告现在存在哪个路径,记得此处与外部的路径要能够勾稽。
- STEP3 存盘后使用 ** javac Hellopkg.java ** 编译出 Hellopkg.class档案
- STEP4 回到 com 目录之外,准备打包 jar,要把完整路径打包进去
使用 jar -cvfm Hellopkg.jar MANIFEST.MF com/ 编译出 jar 檔 - STEP5 最后使用 **export CLASSPATH=$PWD/Hellopkg.jar:$CLASSPATH **指令,将此 jar 档案加入 CLASSPATH 搜寻路径中,以便编译程序搜寻并完成连结
调用范例
上面的程序混和在同一支 4GL 进行呼叫,让大家能清楚差异:
IMPORT JAVA Helloworld #使用单一程序路径
IMPORT JAVA com.dsc.svms.hello.Hellopkg #使用Package路径
MAIN
DEFINE str string
DEFINE abc Helloworld #引入后要使用,一定要用对象的方式宣告
DEFINE def Hellopkg #这里是套件版的
LET abc = Helloworld.create() #注意:java没有,但仍要这样叫,FGL要求的
LET str = “CALL Direct:”,abc.init() #这里才是 java有的
DISPLAY str
LET def = Hellopkg.create() #PKG只是 IMPORT路径不同,用法都相同
LET str = “CALL Package:”,def.init()
DISPLAY str
END MAIN
执行后
IMPORT FGL
对于 FGL的IMPORT,基本上是提供一个对象化的呼叫方式。且 IMPORT FGL时,被引入的42m档案必须事先存在(注),因此当使用的 IMPORT 层级较复杂的时候,编译系统要能够跟上。
语法范例 IMPORT FGL lib_cl_dlg
不带附档名
注:Genero 2.50套件起,开放使用IMPORT FGL。编译前必须自行确认需使用的 42m档案是否已存在于当下路径,或FGLLDPATH 环境变量中 (–JAVA是 CLASSPATH–)。
Genero 4.00套件后,开放可让 FGL 相互 IMPORT,编译时 fglcomp 可主动帮忙将 IMPORT FGL但不存在的部分进行编译,并自动避免相互 IMPORT 造成的逻辑性报错 (不再报错)
因此,当需要使用 IMPORT FGL时,除了呼叫方式可用类似对象的呼叫方法,其余与 link 功能均相同。
FGL支持IMPORT 对象与范例####
范例
调用端
IMPORT FGL module_01
IMPORT FGL module_02
一般函式 function: CALL module_01.create()
对话框
DIALOG
SUBDIALOG module_01.subinput
SUBDIALOG module_02.subinput
END DIALOG
被调用端 – module_01/module_02 两只
DIALOG subinput()
IMPORT FGL除了支持function呼叫外,也支持常用的对话框对象化。若大多数画面要引入同一功能,过往都需要重复撰写。从 Genero 2.50 开始支持 IMPORT FGL 后,此类重复性程序代码已可大幅减低,往 Low Code前进。
转载请注明:赫非域 » [day14] IMPORT之 2: 带入JAVA或其他FGL套件