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

[day14] IMPORT之 2: 带入JAVA或其他FGL套件

后端代码 bron1984 2043浏览

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

[day14] IMPORT之 2: 带入JAVA或其他FGL套件

前一篇IMPORT中,提到Genero Package中有提供一些预先制作的功能套件可用。

可是面对层出不穷的新功能,Genero势必不可能面面俱到。一来得靠其他的 Genero用户支持。或是靠其他语言的特性。因此IMPORT 指令额外还可支持:

  1. 直接汇入现存的 42m 档案,扩增用途
  2. 直接汇入现存的 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套件