iT邦幫忙

2021 iThome 鐵人賽

DAY 14
1
Software Development

Genero Packages - 可接替4GL的LowCode商業語言系列 第 14

[FGL] 吸星大法 - IMPORT之 2: 帶入JAVA或其他FGL套件

  • 分享至 

  • xImage
  •  

前一篇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的目錄階層
    https://ithelp.ithome.com.tw/upload/images/20210914/20051169ocmlR2n6Js.png

  • 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

執行後
https://ithelp.ithome.com.tw/upload/images/20210914/20051169QhmCPR86VC.png

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前進。


上一篇
[FGL] 4GL程式的資源檔Resource file體系
下一篇
[FGL] 服務簡單收 - IMPORT 3 利用http與XML套件取 Web資源
系列文
Genero Packages - 可接替4GL的LowCode商業語言32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言