Business Development Language
Business Development Language. BDL. 講師 : Julius Chen. 第一章. BDL 程式架構. BDL 程式組成. Module1. FUNCTION1. FUNCTION2. FORM1. Module 主要 架構. DATABASE GLOBAL MAIN FUNCTION REPORT. 編譯時參考的 schema 資料庫. 程式所使用的外部變數. 主程式. 函式. 報表. FORM 主要組成.
Business Development Language
E N D
Presentation Transcript
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 的除錯 • 以除錯模式執行程式 • 除錯模式的線上說明 • 除錯模式的常用指令