<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    yeafee@夜飛郎

    it's usually better to solve problems with simplicity and finesse rather than muscle.

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      33 隨筆 :: 3 文章 :: 2 評論 :: 0 Trackbacks
    AS/400? CL (Control Language) 控制語言是用戶與操作系統之間的主要接口。

    AS/400? CL控制語言基礎

    ◇課程大綱:
    l?第一章? 概述
    l?第二章? CL 編程
    l?第三章? 程序間的通訊
    l?第四章? 測試功能

    ◆第一章? 概?? 述
    提要:
    ?*?? CL 命令的作用
    ?*?? CL 命令的分類
    ?*?? 系統菜單

    1.1 CL 命令的作用

    ???? CL (Control Language) 控制語言是用戶與操作系統之間的主要接口。可以說用戶管理和操作 AS/400 系統,均可以通過 CL實現。用戶在不同的工作站或客戶端可以同時使用 CL ,其輸入方式有五種:

    ?*? 在命令行輸入
    ?*? 在菜單畫面選擇
    ?*? 在 work with 菜單中,option 選項
    ?*? 在 CL 程序中執行
    ?*? 遠程調用
    ?????????????????????????????????????????????????
    ??? 前三種輸入方式給用戶提供一種交互式的操作方法,只執行一條命令;第四種方式給用戶提供一種操作,并包含邏輯控制,可以完整地實現一項功能;第五種方式給用戶提供在客戶端直接執行主機操作的接口。

    ??? 由于 CL 使用了統一的命名方法,提供 prompt 式的提示功能和具體到域值的在線幫助,以及自動生成命令參數的缺省值, 再加上有效性檢查,從而使得 CL 的使用變得非常簡單、方便和靈活。

    1.2 CL 命令的參數

    ???? CL 使用了一種很科學,較為成功的命名方法。每條命令由命令名和一系列參數組成。命令名通常由動詞加上接受動詞的名詞(定義為目標Object)組成,單詞通常縮寫為三個字母。????
    例如:????????????????
    ???????? CL 命令?????????????????? 命令名
    ??????? Send Message?????????????? SNDMSG
    ??????? Copy File?????????????????? CPYF
    ??????? Work with Device Desripyions? WRKDEVD
    ?????????
    ???? CL 的參數由關鍵字和參數值組成,關鍵字通常和命令一樣縮寫,它用于說明參數的作用,在命令輸入屏,按 F11 鍵,即可看到關鍵字。在命令行輸入命令時,如果參數是按照固定的順序輸入,則可以省略關鍵字。????
    例如:
    ????? SNDMSG? MSG (HOLLEO)? TOUSR (LENG)
    ?????? 命令名?? 關鍵字 參數值
    ????????
    ??? 大多數 CL 都是 針對目標而言,目標是一個占據了一定存儲空間的實體,它包括自身屬性及其數據特征的描述,系統可以對它進行操作。目標的屬性包括名字、類型、長度、建立日期及其它屬性。不同目標具有不同的屬性描述,大部分屬性是可以修改的,而不需要重新建立。目標的數據值是儲存于目標中的信息集合,例如: 程序的值是組成程序的執行碼,文件的值是組成文件的記錄。

    目標的類型很多,常用的幾種包括:
    ?* LIB????? 庫
    ?* FILE???? 文件
    ?* MSGF??? 信息文件
    ?* PGM???? 程序
    ?* CMD???? 命令
    ?* JOBQ??? 作業隊列
    ?* DTAQ??? 數據隊列
    ?* MSGQ??? 信息隊列
    ?* OUTQ??? 輸出隊列
    ?* DTAARA? 數據域
    ?* JRN????? 日志
    ?* JRNRCV? 日志接受器
    ?* USRPRF? 用戶簡要表
    ?* SBSD??? 子系統描述
    ?* JOBD??? 作業描述?
    ?* LIND???? 線路描述
    ?* CTLD??? 控制器描述
    ?* DEVD??? 設備描述
    ?????????
    ???? 一個具體目標是由目標名和目標類型來唯一標識的,不同的目標類型可以使用同一個目標名。目標名由用戶指定,目標類型由生成它的命令決定。不同類型的目標具有不同的操作。例如:CALL 命令只針對 *PGM 目標進行操作。

    ??? 關于目標的操作,系統也進行了統一的規范,常用的幾種包括:??
    ?* WRK??? 工作
    ?* CRT??? 建立
    ?* ADD??? 增加
    ?* CHG??? 改變
    ?* DLT??? 刪除
    ?* DSP??? 顯示
    ?* EDT??? 編輯
    ?* CPY??? 拷貝
    ?* MOV?? 移動
    ?* RNM?? 變名
    ?* SAV??? 備份
    ?* RST??? 恢復
    ?* RTV??? 獲取
    ?* GRT??? 授權
    ?* DMP?? 轉儲

    ?◆第二章? CL 編程

    ?提要:
    ?*?? CL 程序的作用
    ?*?? CL 程序的結構
    ?*?? CL 程序中的命令

    2.1 CL 程序的作用

    ??? CL 程序是由 CL 命令組成,這些命令被編譯成可供隨時調用的程序。使用 CL 程序的優點包括:

    ?* CL 程序比單獨輸入和運行命令快,因為命令被編譯成能夠立即運行的形式。
    ?* 有些功能需要多條 CL 命令一起完成。
    ?* 參數可以傳遞給CL 程序,CL程序內部也接收變量的定義,以適應特殊需要的程序操作。
    ?* CL 程序能夠像其它高級語言程序一樣被測試和監控。

    ??? CL 程序可以應用到許多方面,包括:

    ?* 通過 CL 程序完成單獨輸入 CL 命令所不能完成的功能,例如,人工或者定時提交批作用完成一項工作,如啟動子系統,進行文件備份,整頓系統資源。
    ?* 給交互式或批處理的應用程序提供一個接口,使得在應用程序中直接進行系統操作或者獲取系統參數。
    ?* 在網絡通信方面,CL 程序往往承擔應用主控程序的角色。

    2.2 CL 程序的結構

    ???? CL 程序是借助于 ADT 工具中的 SEU 輸入的,在輸入過程中,鍵入一條命令并按 F4 鍵,就會顯示出這條命令的提示畫面,方便用戶輸入相應的參數值。CL 源程序主要分為以下幾個部分:


    ?* 程序的開始和結束:
    ?????????????????? PGM? PARM(&A &B) 開始 CL 程序
    ?????????????????? END? PGM? 結束程序
    ?* 變量定義:
    ?????????????????? DCL? 定義變量?
    ?????????????????? DCLF? 定義文件
    ?* CL 處理命令:
    ?????????????????? CHGVAR? 變量賦值
    ?????????????????? MONMSG? 監控錯誤信息
    ?????????????????? SNDPGMMSG? 傳送程序信息
    ?????????????????? RTVJOBA? 獲取作業屬性值
    ?* 邏輯控制命令:
    ?????????????????? IF? THEN? ELSE
    ?????????????????? DO? ENDDO
    ?????????????????? GOTO?
    ?* 內部函數:
    ?????????????????? % SST? 取子串
    ?????????????????? * CAT? 連接字符
    ?* 程序控制命令:
    ?????????????????? CALL? 調用子程序
    ?????????????????? RETURN? 返回調用程序


    2.3 CL 程序的命令

    ???? CL 程序中僅可包含 CL 命令,由系統提供的大多數 CL 命令可用于 CL 程序,而有些 CL 命令是專門用在 CL 程序中的。下面是一張用在 CL 程序中的部分命令清單,其中帶有星號的表示該命令僅能用于 CL 程序內部。

    2.3.1 變量的使用

    ?* 變量說明,使用 DCL 命令來定義變量及其屬性、長度和初值。標準格式如下:
    ?????????????????????????????? * CHAR
    ??? DCL? VAR (變量名) TYPE?? * DEC??? LEN (長度)? VALUE(初值)
    ?????????????????????????????? * LGL????????
    ??????????
    ?? 使用 DCL 命令時,必須遵循的規則如下:

    #CL 變量名必須以 & 開始,后跟字符不多于 10 個,& 后的第一個字符必須是字母,其余的可以是字母或數字。
    ?
    #CL 變量值必須是:字符型最長為 9999 個字符;數值型為壓縮十進制數,最長為 15 位,其中小數位最長為 9 位;邏輯型為“0”或“1”,表示假或真。
    ?
    #CL 變量的缺省初值為:字符型為空,數值型為 0,邏輯型為“0”。
    ?
    #對于字符型和數值型,如果指定了初值而未指定長度,則缺省長度為初值長度。
    ?
    ?* 變量值中小寫字符的限制
    ?
    ?? 用作變量的保留值必須用大寫字母表示,特別是當它們用引號括起來的時候。例如:

    ??? DCL? VAR(&LIB)? TYPE(*CHAR)? LEN(10)? VALUE('*LIBL')
    ??? DLTPGM? &LIB/MY PROG

    ??? 注意:如果 VALUE 參數不使用引號,則小寫是正確的。因為使用 SEU 編輯會自動轉換成大寫。

    ?* 變量賦值,使用 CHGVAR 命令給變量賦值,其值可改變成:

    #常量:? CHGVAR? VAR(&A) VALUE(0)
    #變量:? CHGVAR? VAR(&A) VALUE(&B)
    #計算量:CHGVAR? VAR(&A) VALUE(&A+1)
    #函數量:CHGVAR? VAR(&A) VALUE(%SST(&B 1 5))
    ?????????????? CHGVAR? VAR(%SST(&A 1 5))? VALUE(&B)

    ?? 賦值時應注意以下幾點:

    #對邏輯變量,被改變的值必須是一個邏輯值。
    #對數值變量,只能賦予十進制數,或者數字字符變量(包括小數點和正負號)。
    #對字符變量,既可接受字符,也可接受十進制數。賦十進制數時,該字符變量的值是右對齊,前導補零,負號放在最左邊。
    ?
    ?* CL 程序中注解的書寫,在命令的頭尾使用一對符號:/* 和*/。如果一行寫不下一條命令,使用 +。

    2.3.2 CL 程序內部的邏輯控制

    ?* 條件轉移命令:

    IF? COND(條件) THEN(一條命令)?
    ELSE? CMD(一條命令)
    或者? IF? COND(條件) THEN(DO)
    ???????? .?????
    ????? ENDDO?
    ????? ELSE? CMD (DO)
    ???????? .
    ????? ENDDO

    ?* 無條件轉移命令:GOTO? LABEL
    ?
    ?* 操作符:
    ?????????? 邏輯的 *AND? *OR? *NOT
    ?????????? 算術的 +? -? *? /
    ?????????? 字符的 *CAT? *TCAT?
    ?????????? 關系的 *EQ? *GT? *LT? *GE? *LE? *NE

    ?* 監視信息命令:MONMSG

    ?? MONMSG? MSGID(信息標識 1 … 信息標識 50)+
    ????????????? EXEC(CL命令)

    ??? 系統對于CL命令執行錯誤所送出的信息都具有唯一的標識符,如果不進行監視,則系統會終斷程序,自動顯示錯誤信息。

    2.3.3 系統資源的獲取

    ?* 日期格式轉換命令:CVTDAT

    ?? CVTDAT? DATE(被轉換日期) TOVAR(轉換后日期)+
    ???? FROMFMT(原格式) TOFMT(新格式) TOSEP(新分隔符)

    ?? 其中:轉換后日期的長度至少是:

    #對儒略日期(如 YMD,DMY 或 JUL 格式),不使用分隔符為 5 個字符,使用分隔符為 6 個字符。
    #對非儒略日期,不使用分隔符為 6 個字符,使用分隔符為8 個字符。

    ?? 日期格式和分隔符可以通過按 F4 鍵選擇。

    ?* 檢索系統值命令:RTVSYSVAL
    ???????
    ??? RTVSYSVAL? SYSVAL(系統值名)RTNVAR(CL變量名)
    ????
    ??? 其中:系統值名可以通過按 F4 鍵選擇,如:系統當前日期的系統值是 QDATE。變量名必須和系統值的類型匹配,對字符型和邏輯型系統值而言,變量名的長度必須相符,對數字型,則長度不小于系統值長度。

    ?* 檢索配置源命令:RTVCFGSRC
    ????????
    ?? 用于將現有配置的描述存放到源文件成員中。

    ?* 配置狀態檢索命令:RTVCFGSTS
    ???????
    ?用于獲取各類配置描述的現行狀態,放入 CL 變量。
    ?
    ?* 檢索網絡屬性的命令:RTVNETA
    ?????
    ?用于獲取系統的網絡屬性,放入相應的 CL 變量。如:系統名SYSNAME,本地網絡標識 LCLNETID。
    ??
    ?* 檢索作業屬性命令:RTVJOBA
    ???
    ?用于獲取當前運行作業的屬性,放入相應的 CL 變量。如:作業名 JOB,用戶名 USER。
    ?
    ?* 檢索目標描述命令:RTVOBJD
    ????
    ?用于獲取指定目標的描述屬性,放入相應的 CL 變量。
    ?
    ?* 檢索用戶檔案命令:RTVUSRPRF
    ???????
    ?? 用于獲取指定用戶的檔案資料,放入相應的 CL 變量。

    ◆第三章 程序間的通訊

    ??? 程序間的通訊是指不同程序之間數據或參數的傳遞和交流。這種通訊可以出現在不同種類的程序中。如:RPG 與 C 語言,也可以出現在不同機器上,如:PC 與 AS/400。針對OS/400 而言,通常程序間的通訊具有三種方式:

    ?*? CALL、RETURN 命令
    ?*? 數據隊列通訊
    ?*? 數據域通訊

    3.1 CALL 命令的使用?

    ??? 調用程序:? CALL? PGM(PGMA) PARM(&A? &B)
    ??? 被調用程序:PGM? PARM(&C? &D)

    ??? 有關 CALL 命令使用的幾點說明:

    ?* 參數值可以是字符常量、數值常量、邏輯常量或 CL 常量,最多可達 40 個。
    ?* 參數值以 CALL 命令中出現的順序傳送,這必須與被調用程序的參數順序相匹配,變量名不一定相同。
    ?* 被調程序中的接收參數必須說明,但接收值不受變量說明中初值的影響。
    ?* 接收參數值的改變會反映到調用程序中,但常量傳送不會改變。
    ?* 字符常量通常以 32 個字節傳送,數字常量以 15.5 長度壓縮格式傳送。
    3.2 數據隊列的程序通訊

    ????? 數據隊列(*DTAQ)是系統目標中的一種類型,當建立了這種目標后,一個程序可以發送數據給它,另一個程序再從中接收數據,從而達到程序之間的數據通訊。

    3.2.1 數據隊列的優點

    ?* 數據隊列是兩個作業之間進行異步通訊的最快方法。相對數據庫文件、消息隊列或數據域而言,它需要較少的額外開銷。
    ?
    ?* 多個作業可以向相同的數據隊列送數據和取數據,而數據隊列的先進先出、后進先出或關鍵字順序排列屬性,能夠保證數據送取的正確性。
    ?
    ?* 在任何高級語言程序中,通過調用系統提供的程序,就可以對數據隊列進行操作,而且操作方法靈活方便。數據隊列的操作和使用包括兩類:第一類使用 CL 命令;第二類調用系統程序。
    CL 命令:
    ?????????? CRTDTAQ??? 建立數據隊列
    ?????????? DLTDTAQ??? 刪除數據隊列
    ?????????? WRKDTAQ??? 工作數據隊列
    系統程序:?
    ?????????? QSNDDTAQ? 發送數據隊列
    ?????????? QRCVDTAQ?? 接收數據隊列
    ?????????? QCLRDTAQ?? 清除數據隊列
    ?????????? QMHQRDQD? 檢索數據隊列

    3.2.2 數據隊列的發送
    ??????
    ??? 需要將數據發送給數據隊列,只要在程序中調用QSNDDTAQ 。在 CL 程序中,調用的格式如下:

    CALL? PGM(QSNDDTAQ)? PARM(&QNAME? &LIB? &FLDLEN? &FIELD
    +&KEYLEN? &KEY)

    &QNAME:?? 是長度為10的字符型,它命名了數據隊列,如:IN_Q。
    &LIB:? 是長度為10的字符型,它命名了數據隊列所在的庫,如:*LIBL。
    &FLDLEN: 是長度為5的數字型,它規定了發送給數據隊列的字符數,如:100。
    &FIELD: 是長度為&FLDLEN的字符型,它包含了具體發送給數據隊列的數據。
    &KEYLEN: 是長度為3的數字型,它說明了傳送給數據隊列的關鍵字長度,如:6。
    &KEY:? 是長度為&KEYLEN的字符型,它包含了傳送給數據隊列的關鍵字數據。

    ??? 注:后兩個參數可以自選,如果說明了一個,則必須說明另一個。

    3.2.3 數據隊列的接收
    ??????
    ??? 需要從數據隊列中接收數據,只要在程序中調用QRCVDTAQ 。在 CL 程序中,調用的格式如下:
    ??
    CALL? PGM(QRCVDTAQ)? PARM(&QNAME &LIB &FLDLEN?
    + &FIELD &WAIT &ORDER KEYLEN &KEY &SNDRLEN &SNDR)

    &QNAME:?? 是長度為10的字符型,它命名了數據隊列。如:OUT_Q。
    &LIB:?? 是長度為10的字符型,它命名了數據隊列所在的庫。如:*LIBL。
    &FLDLEN: 是長度為5的數字型,它規定了發送給數據隊列的字符數。
    &FIELD:?? 是長度為&FLDLEN的字符型,它包含了從數據隊列中接收到的具體數據。???
    &WAIT:?? 是長度為5的數字型,它說明了等待接收數據的時間。負數表示無限制的等待;零表示不等待;正數示要等待的秒數,最大值是9999。這個參數只有在數據隊列中無滿足條件的數據時, 才起作用。
    &ORDER:?? 是長度為2的字符型,它說明了按關鍵字接收數據的條件。可用的字符值是:GT、LT、EQ、GE、LE。
    &KEYLEN:? 是長度為3的數字型,它說明了接收數據隊列的關鍵字長度。
    &KEY:??? 是長度為&KEYLEN的字符型,它標識了用于從數據隊列中接收數據的關鍵字變量。
    &SNDRLEN:是長度為3的數字型,它規定了發送者標識的長度。
    &SNDR:? 是長度為&SNDRLEN 的字符型,它包含了發送者標識的數據。

    ??? 注:后三個參數可以任選,但是&ORDER、&KEYLEN和&KEY 必須同時說明。

    3.2.4 數據隊列的清除

    ??? 需要從數據隊列中清除數據,只要在程序中調用 QCLRDTAQ在 CL 程序中,調用的格式如下:
    ????
    CALL? PGM(QCLRDTAQ) PARMM(&QNAME? &LIB)

    3.2.5 數據隊列的檢索
    ????
    ?? 需要檢索一個數據隊列的描述項,只要在程序中調用QMHQRDQD。在 CL 程序中,調用的格式如下:
    ?
    CALL? PGM(QMHQRDQD) PARM(&RCVR? &RCVRLEN?
    + &FORMAT? &DQNAME)

    &RCVR:?? 是長度為&RCVRLEN的字符型,它標識了含有數據隊列性的變量。
    &RCVRLEN: 是長度為4的數字型,它說明了&RCVR長度。
    &FORMAT: 是長度為8的字符型,它定義了接收模板的格式。
    &DQNAME: 是長度為20的字符型,它標識了數據隊列和所在庫,前十個字符是隊列名字,后十個字符是庫名。
    3.3 數據域的程序通訊
    ?????
    ??? 數據域(*DTAARA)是系統目標中的一種類型。當建立了這種目標后,可以用來存入數據,以便任何程序進行讀取和修改。數據域的典型用途如下:

    ?* 提供用于幾個程序中的常數字段,易于共享和修改。如:標題、說明等。
    ?* 在一個作業中提供一個傳遞信息的區域。
    ?* 在一個作業中提供一個字段作為控制參數,以便容易地得到修改。

    ??? 數據域的 CL 命令包括:

    CRTDTAARA??? 建立數據域,長度不超過2000
    CHGDTAARA??? 改變數據域,改變時數據域被鎖定
    DSPDTAARA??? 顯示數據域,可以以十六進制方式顯示
    RTVDTAARA??? 檢索數據域,檢索值需要存入 CL 變量
    DLTDTAARA??? 刪除數據域
    WRKDTAARA?? 工作數據域

    ◆第四章? 測試功能

    提要:
    ?* CL 程序的編譯
    ?* CL 程序的測試

    4.1 CL 程序的編譯

    ??? CL 源程序必須經過編譯,生成 *PGM 方可運行。建立程序的方法有兩種:一是,使用 CL 命令 CRTCLPGM,二是,使用PDM 菜單選項 14,按 F4 鍵即可對命令參數進行選擇。
    ??? 系統編譯的情況全部記錄在編譯清單中,通過 WRKSPLF 即可看到。編譯過程中的錯誤被列在相應命令后面,以及文件的最后,方便用戶查找。下列類型的錯誤將停止程序的建立:
    ?* 值錯
    ?* 句法錯
    ?* 命令內部與參數間不符
    ?* 有效性檢查有錯
    ???? CL 程序可以通過反編譯命令 RTVCLSRC,重新建立 CL 源程序。使用該命令時,必須滿足建立編譯程序的參數ALWRTVSRC 為 *YES。 當源程序被反編后,任何注釋信息不再重新產生,以下程序序言將被建立:
    ?* 所有者名
    ?* 源程序的最終修改日期
    ?* 源程序的重建日期和時間
    ?* 最初編譯時的許可程序級


    4.2 CL 程序的測試

    ??? 對于 CL 程序在編譯和運行中的錯誤,系統提供以下幾種測試功能:

    ?* 程序轉儲。 在 CL 源程序中輸入命令 DMPCLPGM,運行后通過 WRKSPLF 即可看到轉儲內容。包括程序信息隊列的全部信息和全部變量的數值。如果程序運行出錯,出現提示畫面時,輸入 D 也可進行程序轉儲。
    ?
    ?* 設置斷點。第一步,啟動測試環境,使用命令 STRDBG PGM (PGMA);第二步,設置斷點,使用命令 ADDBKP STMT(1500) PGMVAR( '&A'? '&B'); 第三步,運行程序,顯示斷點信息;第四步,結束測試環境,使用命令 ENDDBG。

    ?* 設置跟蹤。跟蹤是記錄程序中語句執行順序的過程。系統并不自動顯示跟蹤信息,而須使用命令 DSPTRCDTA 請求顯示跟蹤信息,信息包括語句執行的順序和 ADDTRC 命令中指定的變量值。

    posted on 2007-08-02 13:54 @yeafee 閱讀(775) 評論(0)  編輯  收藏 所屬分類: AS/400
    主站蜘蛛池模板: 日本黄色免费观看| 国产免费av片在线看| 亚洲国产精品国产自在在线| 亚洲另类自拍丝袜第五页 | 91天堂素人精品系列全集亚洲| 国产精品玖玖美女张开腿让男人桶爽免费看| 日本高清免费网站| 亚洲Av永久无码精品一区二区| 四虎www免费人成| 日韩欧美亚洲国产精品字幕久久久 | 亚洲精品在线播放| 亚州免费一级毛片| 亚洲中文字幕AV每天更新| 女人18特级一级毛片免费视频| 亚洲国产精品成人综合色在线| 国产高清在线免费视频| 深夜a级毛片免费视频| 亚洲日韩人妻第一页| 水蜜桃视频在线观看免费播放高清 | 亚洲国产精品一区二区成人片国内 | 很黄很污的网站免费| 香蕉视频在线观看亚洲| 日本片免费观看一区二区| 亚洲国产系列一区二区三区| 国产精品成人免费综合| 中文字幕无码免费久久9一区9| 亚洲另类激情综合偷自拍| 美女被cao免费看在线看网站| 亚洲中文无码卡通动漫野外| 亚洲av无码国产精品色在线看不卡| 一本久久A久久免费精品不卡| 亚洲AV人无码激艳猛片| 国产99视频精品免费观看7| 污视频网站在线观看免费| 亚洲AV日韩AV天堂一区二区三区| 97无码免费人妻超级碰碰夜夜| 色爽黄1000部免费软件下载| 亚洲免费视频在线观看| 青青青国产免费一夜七次郎| 97超高清在线观看免费视频| 亚洲av乱码一区二区三区 |