1.08k likes | 1.65k Views
Business Development Language. BDL. 講師 : Julius Chen. 第一章. BDL 程式架構. BDL 程式組成. Module1. FUNCTION1. FUNCTION2. FORM1. Module 主要 架構. DATABASE GLOBAL MAIN FUNCTION REPORT. 編譯時參考的 schema 資料庫. 程式所使用的外部變數. 主程式. 函式. 報表. FORM 主要組成.
E N D
Business Development Language BDL 講師: Julius Chen
第一章 BDL 程式架構
BDL程式組成 Module1 FUNCTION1 FUNCTION2 FORM1
Module主要架構 DATABASE GLOBAL MAIN FUNCTION REPORT 編譯時參考的schema資料庫 程式所使用的外部變數 主程式 函式 報表
FORM 主要組成 [DATABASE] SCREEN [TABLES] ATTRIBUTES [ INSTRUCTIONS ] 編譯時參考的schema資料庫 透過 tag 定義畫面呈現 編譯時參考的schema TABLE 定義 tag 的對應定義 用以定義Screen Record及 Screen Array
MAIN Function程式執行起始點 • 格式: MAIN statement END MAIN Ex: MAIN #這是第一隻程式 : DISPLAY “HELLO WORLD!!” : END MAIN 註解方式分為 # 及 {} 1. # 單行註解, 表示 # 之後到行尾都是註解 2. {} 區段註解 表示 {} 所包圍的範圍內為註解
Compiling And Linking 程式部份 Module .4gl fgl2p .42m Form .per fglform .42f 連結 fgllink –o xxx.42r xx1.42m xx2.42m .42r 執行fglrun xxx
第二章 變數與運算式
變數型態 • SMALLINT: 包含整數值 • INTEGER : 包含整數值 • DECIMAL[m,n]: 包含小數的浮點數 • SMALLFLOAT : 包含為二進位的浮點數值 • MONEY[m,n] : 類似DECIMAL型態,在值之前自動加上$ • CHAR: 可儲存字母,數字及符號 • DATE: 儲存日期,格式“MM/DD/YYYY”
變數型態 • Array[I,j,k] of type : 最多為三維陣,最少為一維陣列,“[]”不可省略。 • Record :用來描述一群變數的集合。
變數定義方式 1. 直接指定型態 DEFINE employee_no CHAR(10) 2. 透過 LIKE 參考 TABLE 的定義 (a) 定義單一變數 DEFINE employee_no LIKE employee_file.no (b) 定義一個 record DEFINE employee.* RECORD LIKE employee_file.*
BDL語法 -- AssignmentLET敘述 • 格式: LET變數=運算式 Ex: LET g_cmd = ‘apyi010’,’-’,’compute’ g_cmd =‘apyi010-compute’
BDL語法 -- AssignmentINITIALIZE敘述 • 格式: INITIALIZE 變數串列 {LIKE 欄位串列|TO NULL} Ex: INITIALIZE g_ima.* LIKE ima_file.* INITIALIZE g_ima.* TO NULL
變數的定義位置及生命週期 1. Local 變數 : 定義位置 : 定義在Module中的函式裡 (MAIN, FUNCTION 等) 生命週期 : 只屬於該定義的函式使用 2. Module 變數 : 定義位置 : Module 中, 但不被任何的函式包圍 生命週期 : 為該 Module 中的共用變數 3. Global 變數 : 定義位置 :由 GLOBALS及 END GLOBALS 所包圍的變數 生命週期 : 為所 link 使用的 MODULE 的共用變數
第三章 程式流程控制
BDL語法IF敘述 • 格式:IF ….THEN statement [ELSE statement ] END IF EX: IF l_str=‘Y’ THEN DISPLAY “IT’s ok!!!” ELSE DISPLAY “IT’s not ok!!!” END IF
BDL語法CASE敘述 Ex: MAIN CASE WHEN l_n=0 RETURN WHEN l_n=1 CALL i010_show() OTHERWISE ERROR “It’s error!!!” EXIT CASE END CASE END MAIN
BDL語法WHILE敘述 • 格式:WHILE statement [CONTINUE WHILE] END WHILE EX: WHILE l_n <10 LET l_n=l_n+1 DISPLAY l_n END WHILE
BDL語法FOR敘述 • 格式:FOR var=int_expr to int_expr statement [CONTINUE FOR] END IF EX: FOR l_n=1 to 10 LET l_I=l_I+l_n DISPLAY l_n END FOR
BDL語法CONTINUE敘述 • 格式: CONTINUE {FOR/FOREACH MENU/WHILE} Ex: CONTINUE FOR CONTINUE MENU CONTINUE WHILE
BDL語法EXIT敘述 • 格式: WHIEL TRUE #CASE / FOR / INPUT ….. # FOREACH / MENU EXIT WHILE #PROGRAM / WHILE END WHILE
第四章 SCREEN FORM Text Mode
FORM 主要組成 [DATABASE] SCREEN [TABLES] ATTRIBUTES [ INSTRUCTIONS ] 編譯時參考的schema資料庫 透過 tag 定義畫面呈現 編譯時參考的schema TABLE 定義 tag 的對應定義 用以定義Screen Record及 Screen Array
INSTRUCTIONS 定義螢幕陣列, 此 Section 並非必要的, 需要定義螢幕陣列時才定義之 Example : INSTRUCTIONS SCREEN RECORD s_employee(emp.no, emp_age) END
ATTRIBUTES 常用列表 • AUTONEXT :若該欄位填滿後,自動跳下一欄位。 • NOENTRY :指定該欄位不允許輸入。 • REQUIRED :指定該欄位一定要輸入。 • REVERSE :顯示時反白。 • DOWNSHIFT :所有輸入字母均轉成小寫。 • UPSHIFT :所有輸入字母均轉成大寫。 • INVISIBLE :該field輸入時,不顯示值在螢幕上。 • COMMENTS :欄位的輔助說明。
第五章 FORM 與 WINDOWS
BDL語法OPEN WINDOW敘述 EX: OPEN WINDOW i031_w AT 5,10 WITH FORM "apy/frm/apyi031" ATTRIBUTE(BORDER,CYAN)
BDL語法CLEAR敘述 Ex: CLEAR WINDOW win_1 CLEAR FORM
BDL語法畫面設定 選項意義預設值 MESSAGE LINE 訊息列2 or FIRST+1 PROMPT LINE 提示列FIRST COMMENT LINE 註解列LAST-1 ERROR LINE 錯誤列LAST FORM LINE 螢幕起始列3 or FIRST+2 INPUT WRAP 環繞建INPUT INSERT KEY 螢幕陣列插入鍵F1 DELETE KEY 螢幕陣列刪除鍵F2 NEXT KEY 換頁鍵(下一頁) F3 PREVIOUS KEY 換頁鍵(上一頁) F4 ACCEPT KEY 確認鍵Esc HELP KEY 求助鍵CTRL-W
BDL語法DEFER敘述 • 格式:DEFER{INTERRUPT | QUIT} Ex: DEFER INTERRUPT
第六章 建立功能表
BDL語法MENU敘述 • 格式: MENU “功能表名稱” COMMAND “選項” “輔助訊息” COMMAND KEY(按鍵) [CONTINUE MENU] [EXIT MENU] [NEXT OPTION “選項”] END MENU
第七章 INPUT 與 DISPLAY
BDL語法DATABASE敘述 • 格式: DATABASE database-name Ex: DATABASE ds MAIN ……. ……. END MAIN
BDL語法INPUT敘述 格式:INPUT Module變數 FROM Form欄位 OR INPUT BY NAME Module變數 EX: INPUT g_ima01 FROM FORMONLY.ima01 INPUT BY NAME g_ima.*
INPUT 架構 INPUT variable_list FROM field_list [BEFORE FIELD field_list] [AFTER FIELD field_list] [ON KEY (key_list)] [NEXT FIELD field name] [EXIT INPUT] END INPUT
BDL語法DISPLAY敘述 EX: DISPLAY “Hello World” AT 3,2 DISPLAY BY NAME a.* DISPLAY a[l_n].* TO s_form[l_n].*
第八章 CURSOR 的應用
BDL語法CURSOR種類 一 Non-Scrolling CURSOR 二 Scrolling CURSOR 三 Locking CURSOR EX: DECLARE cursor_name FOR sql statement EX:1. DECLARE cursor_name SCROLL CURSOR FOR sql statement 2. DECLARE cursor_name SCROLL CURSOR WITH HOLD FOR sql statement EX: DECLARE cursor_name FOR sql statement FOR UPDATE
BDL語法CURSOR的使用 一 Non Scrolling Cursor count cursor 1. 透過 DECLARE 定義 2. 利用 OPEN 開啟該CURSOR EX : OPEN test01_cursor 3. 透過 FETCH cursor_name INTO 變數 抓取資料 將多筆的資料存入陣列 如單身及報表 1. 透過 DECLARE 定義 2. 利用 FOREACH 抓資料 EX : FOREACH cursor_name INTO g_gem[l_n].*
BDL語法CURSOR的使用 二 Scrolling 常用於 查詢(TIPTOP的單檔) 1. 透過 DECLARE 定義 2. 利用 OPEN 開啟該CURSOR EX : OPEN test01_cursor 3. 透過 FETCH cursor_name INTO 變數 抓取資料
BDL語法CURSOR的使用 三 Locking CURSOR 用於 修改 資料 1. 透過 DECLARE 定義 2. 利用 OPEN 開啟該CURSOR EX : OPEN test01_cursor 3. 透過 FETCH cursor_name INTO 變數 抓取資料
BDL語法CONSTRUCT敘述 格式 : 1. CONSTRUCT Module變數 ON TABLE Column List FROM Form欄位 2. CONSTRUCT BY NAME Module變數 ON TABLE Column List
BDL語法DECLARE敘述 格式:DECLARE cursor_name [SCROLL CURSOR] [WITH HOLD] FOR {SQL Statement} Ex: DECLARE test_01 CURSOR FOR SELECT * FROM azb_file WHERE azb01=‘JOHN’
BDL語法PREPARE敘述 格式: PREPARE statement FROM string_spec EX: Let l_sql = “SELECT * FROM a_file”, “ WHERE a01=‘”,wiky,”’” PREPARE pre_sql FROM l_sql
SCROLL CURSOR 抓取資料 FETCH FIRST FETCH PREVIOUS FETCH NEXT FETCH LAST FETCH ABSOLUTE 移到資料的第一筆 移到資料的上一筆 移到資料的下一筆 移到資料的最後一筆 移到資料的指定筆數
BDL語法FOREACH敘述 • 格式: FOREACH cursor_name INTO variable statement ………. [CONTINUE FOREACH] ………. [EXIT FOREACH] END FOREACH 附註 : FOREACH 只能用於 non_scrolling cursor
第九章 Debugger 的使用
BDL 的除錯 • 以除錯模式執行程式 • 除錯模式的線上說明 • 除錯模式的常用指令