前一篇IMPORT中,提到Genero Package中有提供一些预先制作的功能套件可用。
可是面对层出不穷的新功能,Genero势必不可能面面俱到。一来得靠其他的 Genero用户支援。或是靠其他语言的特性。因此IMPORT 指令额外还可支持:
不可否认的,虽然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 搜寻路径中,以便编译器搜寻并完成连结
如果要串接的 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 范例中可以看到,初始时就要宣告现在存在哪个路径,记得此处与外部的路径要能够勾稽。
上面的程序混和在同一支 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
执行後
对於 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 功能均相同。
范例
调用端
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前进。
前言 前面介绍完型别注解和型别推论,今天要和大家来谈 TypeScript 有哪些类型的型别,在这些...
知识产权具有所有者,否则它将属於公共领域。“商业秘密是指可以出售或许可的机密信息的知识产权(IP)。...
指派/指定 运算子(Assignment Operator) 可以用来设定变数值的运算子,前面用过的...
React Component 只能透过资料状态的改变来更新画面,而 React 元件有两种资料来源...
-Cookie中的ASP.NET会话ID(来源:https://blog.httpwatch.co...