iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
Software Development

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

[FGL] 吸星大法 - IMPORT之 1: 使用extension擴展功能

  • 分享至 

  • xImage
  •  

轉換為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安全包等提供。相關資源後續進行個別探討。


上一篇
[FLM] Genero的License授權
下一篇
[FGL] 4GL程式的資源檔Resource file體系
系列文
Genero Packages - 可接替4GL的LowCode商業語言32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言