RPG AS400程序员培训手册6

合集下载

AS400培训-RPG

AS400培训-RPG

AS/400培训资料于勇IPACS北京在RPGLE中的文件定义_________________________________________________ 3 在RPGLE中有关文件操作的操作码_______________________________________ 5 只输出子文件定义_______________________________________________________ 8 实现输出类型子文件_____________________________________________________ 9 输出类型子文件有定位处理______________________________________________ 12 实现有定位处理输出类型子文件__________________________________________ 13 处理类型子文件有定位处理______________________________________________ 17 实现处理类型子文件有定位处理__________________________________________ 20 处理类型子文件有定位处理和光标处理____________________________________ 26 实现有定位处理、光标处理子文件________________________________________ 29 处理类型子文件有定位、光标、信息子文件处理____________________________ 35 实现有定位、光标、信息子文件的处理类型子文件__________________________ 38 处理类型单页子文件定义________________________________________________ 45 实现处理类型单页子文件________________________________________________ 49 打印文件定义__________________________________________________________ 59 实现打印文件__________________________________________________________ 61在RPGLE中的文件定义**************************************************************** * Copyright 北京宇博电子科技有限公司 1998 * **************************************************************** * * * Program Id - FileDfn * * Program Type - RPGLE * * Purpose - 用于讲解在RPGLE中的文件定义 * * 不可编译 * * Date Generated - 1998-07-22 * * Author - 于勇 * * * *****************************************************************ilename++IPEASFRlen+LKlen+AIDevice+.Keywords+++++++++++++++++++ *..1....+....2....+....3....+....4....+....5....+....6....+. (7)* -------------------------------------------------------------- * 顺序和直接存取只用于输入操作 ( Read , Chain )* -------------------------------------------------------------- FCustomer IF E K DISK* -------------------------------------------------------------- * 仅使用Write来增加记录* -------------------------------------------------------------- FCustomer O E K DISK* -------------------------------------------------------------- * 顺序和直接存取用于输入( Read , Chain ) , Update , Delete* 不包含Write操作* -------------------------------------------------------------- FCustomer UF E K DISK* -------------------------------------------------------------- * 顺序和直接存取用于输入( Read , Chain ) , Update , Delete* 包含Write操作* -------------------------------------------------------------- FCustomer UF A E K DISK* -------------------------------------------------------------- * 显示文件定义说明* -------------------------------------------------------------- FCustomerD CF E Workstn* -------------------------------------------------------------- * 打印文件定义说明* -------------------------------------------------------------- FCustomerP O E Printer在RPGLE中有关文件操作的操作码***************************************************************** Copyright 北京宇博电子科技有限公司 1998 ****************************************************************** ** Program Id - FileOpr ** Program Type - RPGLE ** Purpose - 用于讲解在RPGLE中的文件操作码 ** 不可编译 ** Date Generated - 1998-07-22 ** Author - 于勇 ** ******************************************************************物理文件定义FCustomer UF A E K Disk*显示文件定义FCustomerd CF E Workstn*参照外部文件的数据结构定义D Customer_DsE Ds Extname( Customer )D Dspf_DsE Ds Extname( Customer )D Prefix(XS:2)*关键字列表定义C Csklist KlistC Kfld Csid*读下一条记录*IN90 = *OFF表示读到记录C Read Customerr 99*读上一条记录*IN90 = *OFF表示读到记录C ReadP Customerr 99*最小值定位C *Loval SetLl Customerr*最大值定位C *Hival SetGT Customerr*定位指示符含义C Csklist Setll Customerr 979899* *In97 No Record Found* *In98 Error Occurred* *in99 Exact Match for Search Argument Found*读下一条等于关键字的记录C Csklist Reade Customerr 99*读上一条等于关键字的记录C Readpe Customerr 99*用指定关键字读一条记录并且不锁定读到记录*IN88 = *OFF读到C Csklist Chain(N) Customerr 97*修改记录C Update Customerr*删除记录C Delete Customerr*增加记录C Write CUSTOMERR*记录解锁C UNLOCK CUSTOMERR*条件语句C If Not *In97*赋值语句C EVAL FLD2=FLD1C MOVE FLD1 FLD2C ELSEC MOVE FLD2 FLD1C EndIf*条件选择语句C SELECTC WHEN FLD1=FLD2C OTHERC ENDSL*循环语句C Dow Not *In97C EndDoC Dow Not *In03*显示屏幕并从屏幕中读取内容C ExFmt Dsp01C EndDo*程序结束C Move *ON *InLr只输出子文件定义A*%%TS SD 19980811 141319 YUYONG REL-V3R7M0 5716-PW1 A*%%EC A DSPSIZ(24 80 *DS3) A R SFL01 SFL A*%%TS SD 19980807 103111 YUYONG REL-V3R7M0 5716-PW1 A CSID R O 9 10REFFLD(CUSTOMERR/CSID *LIBL/CUSTOM- A ER) A CSNAME R O 9 23REFFLD(CUSTOMERR/CSNAME *LIBL/CUST- A OMER) A R CTL01 SFLCTL(SFL01) A*%%TS SD 19980811 141319 YUYONG REL-V3R7M0 5716-PW1 A SFLSIZ(0100) A SFLPAG(0010) A CA03(03) A OVERLAY A 30 SFLDSP A 31 SFLDSPCTL A 33 SFLCLR A 34 SFLEND(*MORE) A 1 3'CS0101D' A 1 31'查询用子文件' A DSPATR(HI) A 1 72DATE A EDTCDE(Y) A 2 72TIME A 8 9'客户号' A DSPATR(HI) A 8 31'客户名称' A DSPATR(HI) A R FUN01 A*%%TS SD 19980811 141319 YUYONG REL-V3R7M0 5716-PW1 A 22 3'F3 =退出' A COLOR(BLU)实现输出类型子文件**************************************************************** * Copyright 北京宇博电子科技有限公司 1998 * **************************************************************** * * * Program ID - CS0101R * * Program Type - RPGLE * * Purpose - 建立一个输出类型的子文件 * * Date Generated - 1998-08-06 * * Author - 于勇 * * * **************************************************************** *数据文件定义FCustomer IF E K Disk *显示文件定义FCs0101D CF E WorkStn Sfile( Sfl01 : RecNbr )*子文件用相对记录号定义D RecNbr S 4 0 Inz( *Zero ) *子文件最大记录数D RecLmt S 4 0 Inz( 9999 )*============================* * 主程序 * *============================* *子文件清除C ExSr SflClrSr *子文件记录装入C ExSr SflLodSrC Dow Not *In03 F3*子文件显示C Exsr SflDspSr C EndDo C Move *On *InLr*----------------------------* * 子文件初始化 * *----------------------------*C SflClrSr BegSrC Eval *In30 = *Off SflDspC Eval *In31 = *Off SflCtlDspC Eval *In33 = *On SflClr*写字文件控制记录C Write Ctl01 C Eval *In33 = *Off C Eval *In34 = *Off SflEnd*恢复子文件初值C Reset RecNbr C EndSr*----------------------------* * 子文件数据装入 * *----------------------------* C SflLodSr BegSrC *Loval SetLL CustomerR C Read CustomerR 99 C Dow Not *In99 And C RecNbr <= RecLmt *生成子文件相对记录号C Eval RecNbr = RecNbr + 1 *写子文件记录C Write Sfl01 C Read CustomerR 99 C EndDo *子文件不为空C If RecNbr > *Zero C Move *On *In30 SflDspC Endif *读文件结束C If *In99 C Move *On *In34 SflEndC Endif C EndSr*----------------------------* * 子文件显示 * *----------------------------* C SfldspSr BegSrC Eval *In31 = *On SflCtlDspC Write Fun01 C Exfmt Ctl01 C Eval *In31 = *Off SflCtlDspC EndSr输出类型子文件有定位处理A*%%TS SD 19980811 135301 YUYONG REL-V3R7M0 5716-PW1 A*%%EC A DSPSIZ(24 80 *DS3) A R SFL01 SFL A*%%TS SD 19980807 103529 YUYONG REL-V3R7M0 5716-PW1 A CSID R O 9 10REFFLD(CUSTOMERR/CSID *LIBL/CUSTOM- A ER) A CSNAME R O 9 23REFFLD(CUSTOMERR/CSNAME *LIBL/CUST- A OMER) A R CTL01 SFLCTL(SFL01) A*%%TS SD 19980811 135301 YUYONG REL-V3R7M0 5716-PW1 A SFLSIZ(0100) A SFLPAG(0010) A CA03(03) A OVERLAY A 30 SFLDSP A 31 SFLDSPCTL A 33 SFLCLR A 34 SFLEND(*MORE) A RECRRN 4S 0H SFLRCDNBR A 1 3'CS0102D' A 1 31'有定位子文件' A 1 72DATE A EDTCDE(Y) A 2 72TIME A 4 60'客户号定位:' A POSCSID 5A I 4 75 A 8 9'客户号' A 8 32'客户名称' A R FUN01 A*%%TS SD 19980805 161157 YUYONG REL-V3R7M0 5716-PW1 A 22 3'F3 =退出'实现有定位处理输出类型子文件**************************************************************** * Copyright 北京宇博电子科技有限公司 1998 * **************************************************************** * * * Program ID - CS0102R * * Program Type - RPGLE * * Purpose - 建立一个输出类型的子文件 * * 有定位 * * Date Generated - 1998-08-06 * * Author - 于勇 * * * **************************************************************** *数据文件定义FCustomer UF E K Disk *显示文件定义FCs0102D CF E WorkStn Sfile( Sfl01 : RecNbr )D CsKeyAry S 5 Dim( 9999 ) D Ascend *数组下标定义D X S 4 0 Inz( 1 )D CsKeyDs DS D Csid 5D PosDs DS D PosCsid 5 Inz( *Blank )*子文件用相对记录号定义D RecNbr S 4 0 Inz( *Zero ) D LstRecNbr S 4 0 Inz( *Zero )*子文件最大记录数D RecLmt S 4 0 Inz( 9999 )*============================* * 主程序 * *============================**子文件清除*子文件记录装入C ExSr SflLodSrC Dow Not *In03 *子文件定位C Exsr SflPosSr*子文件显示C Exsr SflDspSr C EndDoC Move *On *InLr *----------------------------* * 子文件初始化 * *----------------------------* C SflClrSr BegSrC Eval *In30 = *Off SflDspC Eval *In31 = *Off SflCtlDspC Eval *In33 = *On SflClr*写字文件控制记录C Write Ctl01 C Eval *In33 = *Off SflClr*恢复子文件初值C Reset RecNbrC EndSr *----------------------------- * 子文件数据装入 * *----------------------------- C SflLodSr BegSrC *Loval SetLL CustomerR C Read CustomerR 99 C Dow Not *In99 And C RecNbr <= RecLmt *生成子文件相对记录号C Eval RecNbr = RecNbr + 1 *将关键字赋值给数组C Eval CsKeyAry( RecNbr ) = CsKeyDs *写子文件记录C Write Sfl01C EndDo*子文件不为空C If RecNbr > *Zero C Eval LstRecNbr = RecNbr C Move *On *In30 C Endif*读文件结束C If *In99 C Move *On *In34 C EndifC EndSr *----------------------------* * 子文件定位 * *----------------------------* C SflPosSr BegSrC If PosDs <> *BlankC ReSet X C PosDS LookUP CsKeyAry( X ) 97 99 C If *In97 Or *in99 C Eval RecRrn = X C Else C Eval RecRrn = LstRecNbr C EndIfC Else C Eval RecRrn = 1 C EndIfC EndSr *----------------------------* * 子文件显示 * *----------------------------* C SfldspSr BegSrC Eval *In31 = *On C Write Fun01 C Exfmt Ctl01 C Eval *In31 = *OffC EndSr处理类型子文件有定位处理A*%%TS SD 19980811 141059 YUYONG REL-V3R7M0 5716-PW1 A*%%EC A DSPSIZ(24 80 *DS3) A R SFL01 SFL A*%%TS SD 19980811 135222 YUYONG REL-V3R7M0 5716-PW1 A SCADDRESS 30A H A OPT 1Y 0B 9 5EDTCDE(2) A SCCSID R O 9 10REFFLD(CUSTOMERR/CSID *LIBL/CUSTOM- A ER) A SCCSNAME R O 9 23REFFLD(CUSTOMERR/CSNAME *LIBL/CUST- A OMER) A R CTL01 SFLCTL(SFL01) A*%%TS SD 19980811 141059 YUYONG REL-V3R7M0 5716-PW1 A SFLSIZ(0100) A SFLPAG(0010) A CA03(03) A CA06(06) A OVERLAY A 30 SFLDSP A 31 SFLDSPCTL A 33 SFLCLR A 34 SFLEND(*MORE) A RECRRN 4S 0H SFLRCDNBR(CURSOR) A 1 3'CS0103D' A 1 29'有选项处理定位子文件' A DSPATR(HI) A 1 72DATE A EDTCDE(Y) A 2 72TIME A 4 2'请键入选项,按执行键继续。

AS400_初级培训

AS400_初级培训

一.AS/400简介 (3)二.开发环境和开发工具介绍 (4)1.AS/400环境简介 (4)1.1三级存储结构 (4)1.2 如何建立库、文件和成员 (7)2、ILE简介 (8)3、AS/400开发工具介绍 (9)三.DDS介绍和实例说明 (10)1、AS/400的DDS常用类型介绍 (11)2、AS/400物理文件和逻辑文件介绍 (11)3、AS/400如何使用DDS来创建物理文件和逻辑文件 (11)4、AS/400如何使用DDS来创建显示文件 (16)四.RPG介绍和实例说明 (20)1、RPG的基本结构介绍 (20)2、F段介绍 (21)3、D段介绍 (23)3.1 单独变量的定义 (23)3.2 结构变量的定义 (24)3.3 常量的定义 (24)3.3 数组的定义 (24)4、C段介绍 (25)4.1 概念 (25)4.2 程序入口的定义 (27)4.3 程序的结束 (27)4.4 变量的赋值 (27)4.5 子过程的定义 (28)a)概述 (28)b)子过程的建立 (28)c)子过程的调用 (29)4.6 程序过程控制(判断、循环) (30)a) 判断 (30)b) 多重判断 (30)c) 循环 (30)4.7 数据文件的操作 (31)a) 文件相关操作 (31)b) 记录定位相关操作(游标) (31)c) 记录更新相关操作 (33)5、一个程序的实例及分析 (34)6、在RPG中嵌入SQL (48)五.CL程序的开发介绍 (48)1、CL 命令的介绍 (48)2、CL 程序 (49)3、CL 程序实例 (50)六.程序间的互相调用 (53)1、RPGIV之间的调用 (53)2、CLP与RPG之间的调用 (55)AS/400 初级培训讲义目的:希望通过短期培训,让有编程基础的技术人员,了解AS/400的一些基本概念和操作方式。

了解AS/400的代码编辑方式和基本概念一. AS/400简介AS/400是IBM于1988年推出的一种商用小型机,它是在 IBM System/32,System/34,System/36,System/38这个系列的基础上发展而来的。

AS400 操作指南

AS400 操作指南

AS/400 系统操作员指南广州通亿计算机科技有限公司2002年第二版目标了解 AS/400 基本结构 ---- ---- 硬件及操作系统组成掌握 AS/400 操作方法 ---- ---- 命令,菜单及在线帮助掌握 AS/400 基本维护方法1,了解 AS/400 故障类型2,掌握 SST 使用方法,检查系统状态3,会查找手册,了解问题性质4,了解手动开机步骤,并会操作目录第一章, AS/400 系统概述第二章, AS/400 基本操作第三章,手动开机介绍第四章, AS/400 故障分析介绍第五章,常有参考手册说明第一章 AS/400 系统概述一,IBM i系列简介未来发展Domino 专用处理器性能Domino 专用处理器工作范围二,基本概念完整的系统,集成了关系型数据库和网络功能等特性。

特点:1,易于使用2,系统无缝的成长和提高3,针对商业环境而做的侧重于输入--输出方面的优化设计系统层次化架构:图1 - AS/400 系统体系结构MI(机器接口)的功能:图2 – MI 功能面向对象的技术:提高系统和其数据的整体完整性用户无须考虑对象所要占用的空间,系统会自动分配提高系统的灵活性,代码再使用,编程的效率和降低出错率单层次的存储概念微处理器的簇形结构SOIO n-chip Copper-wiring 技术热插拔第二章 AS/400 基本操作一,面板操作二,系统启动和停止三,处理及报告系统问题四,常用系统维护方法及命令说明OS/400 命令组成方法缩写惯例:WRK DSP CHGDEV TAP CMN PRT DSK SYS PWR LOG CMD STS CFGMSG MSGQ OUTQ PRB QHST例如:WRKOUTQDSPMSGWRKSYSSTSDSPLOGOS/400 命令中常用的功能键F1 帮助及说明 ( 针对光标所在位置)F4 列出可能选项 ( 或称:参数),针对光标所在位置F5 刷新F10 显示附加选项PGDN 向下翻页PGUP 向上翻业用户及权限:QSYSOPR --------- 系统定义QSRV --------- 系统定义,为系统维护使用QSECOFR --------- 系统定义,为系统中最高权限重点介绍:1, WRKSYSSTS2, STRSST3,全系统备份4,清洗磁带机方法5,常有维护命令命令说明GO *ALL 出所有系统命令的菜单GO cmddsk 到硬盘命令菜单GO cmdhdw 到硬件命令菜单GO cmdpwr 到电源命令菜单GO cmdsys 到系统命令菜单GO SAVE 到备份菜单GO RESTORE 到恢复菜单GO main 到主菜单anzprb 分析一个新问题chgmsgq qsysopr *break 改变系统操作员信息为中断方式dltprb 删除问题日志中超过30天的记录dspjob 显示一个作业DSPJOBLOG 显示作业日志dsplog qhst 显示历史日志dspsysval 显示系统值endsbs 结束子系统inztap 格式化磁带pwrdwnsys *immed 关系统电源savsys 保存系统signoff 退出用户STRSST 启动系统维护工具vfycmn 显示通讯确认屏幕vfyprt 确认打印机是否正常vfytap 确认磁带机或光盘机状态vfycfg 确认配置 ( 如设备,I/O 处理器或通讯线是开还是关断 ) WRKCFGSTS 显示所有 I/O 处理器的状态wrkdevd 处理所有设备描述wrkoutq 处理输出队列wrkprb 显示问题日志wrkhdwprd 显示硬件产品wrkhdwrsc 显示资源名WRKSYSSTS 显示系统状态第三章手动开机介绍1,系统面板上选择手动方式2,如果系统还没有上电,按面板上的电源开关3,开主控台4,一切正常后,主控台会显示如下画面:IPL or Install the SystemSelect one of the following1. Perform an IPL2. Install the operating system3. Use Dedicated Service Tools ( DST )4. Perform automatic installation of the operating systemSelection__5,键入 “ 1 ,按执行键”6,系统会出现如下画面,需要人为介入:A,Display Messages按 F12 键B, Sign On以 QSECOFR 注册C, Select Products to Work with PTFs按 F12 键D, IPL Options输入系统日期和系统时间E, Display Messages按 F12 键7,出现主菜单后,若要恢复常规状态,采取以下步骤:A,在系统面板上,将手动改为常规方式B,键入命令:pwrdwnsys *immed restart(*yes)第四章 AS/400 故障分析介绍一,故障分析包括:1,故障的确定确定是软件还是硬件故障2,故障的隔离找出故障的原因二,正确的故障分析,需注意以下几点:1,准确的描述故障及其表现特征2,确认它是否为一个新问题还是已发生过3,通过以上步骤,确定所须的正确的信息4,收集信息5,确定要解决故障须联络的人三,通常须收集的信息:1,QHST 中相关时间段的打印输出2,错误日志 ( ERROR LOG )STRSST3,系统硬件配置WRKHDWPRD4,相关时间段的 QSYSOPR 的信息DSPMSG QSYSOPR5,问题发生的日期和时间四,系统故障的外部表征:stops --------- 死机1,Hard2, Incorrect optput --------- 不正确的输出3,Job--------- 作业循环loops--------- 作业等待waits4,Jobloop--------- 系统循环5,Systems6, Systems wait -------- 系统等待7,Messages--------- 信息8,OSproblem --------- 操作系统问题9, VLIC problem --------- 微码问题10,Communication problem --------- 通讯问题11,IPLproblems --------- IPL问题--------- 工作站死锁12,Woekstationlocksstops --------- 死机1,Hard* 系统注意( Attention ) 黄灯亮,并有代码显示在面板上* 工作站键盘不能输入* DST 画面出不来,功能选择项 21 不工作--------- 不正确的输出optput2,Incorrect* 系统继续运行,作业正常结束,但后来发现输出不对* 问题通常可再现* 一些不该发生的事发生了* 一些该发生的事没有发生3,Messages --------- 信息* job log ( 作业日志 )* qsysopr 的 MSGQ ( 信息队列 )* qhst ( 历史记录 )4,Hang --------- 挂起* 系统挂起”特征象 “ 死机,但没有代码显示* 作业挂起WRKACTJOB,作业没有消耗任何系统资源5,Loops --------- 循环* 系统循环> 处理器活动率灯显示 100%> 所有工作都停下来* 作业循环> 处理器活动率灯显示 100%> 系统性能下降> 作业没有在预期的时间内结束> 其他作业继续运行,但速度显得非常慢6,Communicationproblem --------- 通讯问题* 线路( LINE ),控制器( CTL )或设备( DEV ) 不正常problem --------- 性能问题7,Performance* 有关性能的系统命令> WRKSYSSTS> WRKDSKSTS> WRKACTJOB8,Workstationlocks --------- 工作站死锁* 15 次以上在同一台设备以同样的用户帐号注册失败第五章常有参考手册说明《 9406 270 Problem Analysis 》《 AS/400 Service Fuction 》。

AS400如何编写RPG程序

AS400如何编写RPG程序

AS400如何编写RPG程序As400如何编写RPG程序1. 写给刚接触AS/400的朋友 --- 如何建立库、文件和成员鉴于很多朋友都还是刚接触AS/400,我就从系统登陆开始简单说说吧~打开AS/400仿真终端(可以是PCOM、CA等软件,如何配置就不说了),输入用户名和密码,进入系统。

如果你的权限足够的话,可以使用CRTLIB命令给自己建个库,如:CRTLIB LIB(MYLIB) TYPE(*TEST) TEXT('for test') 库建好之后,你可以使用STRPDM->2,在Library处输入库名MYLIB,按确认键就进入该库。

这时库下面没任何文件,你可以使用CRTSRCPF命令建立一个源物理文件,用来放置源码,如: CRTSRCPF FILE(MYLIB/MYSRCPF) IGCDTA(*YES) TEXT('源物理文件') 【注:】参数IGCDTA(*YES)表示该源物理文件里头的源码文件都可以使用中文到此为止,自己存放源码的地方已经生成,你可以直接使用以下命令直接进入该源物理文件: WRKMBRPDM FILE(MYLIB/MYSRCPF)进入该文件之后,就可以建立任何源码文件了,按F6,显示“Start Source Entry Utility(STRSEU)”画面,参数说明如下:1. Source member:表示建立的成员名,我们把它理解成存放源码的文件就可以,类似WINDOW平台的TXT文件;2. Source type:表示建立的成员名的类型,如果不确定,可按 F4 查看,常用类型有(1)PF: 物理文件;(2)LF: 逻辑文件;(3)RPG: RPG程序源码文件;(4)RPGLE: RPGLE程序源码文件;(5)DSPF: 显示文件;(6)CLP: CLP程序源码文件;(7)CMD: 命令文件……3. Text 'description':表示对该文件的描述,可填可不填。

AS400 CL 编程手册

AS400 CL 编程手册

第五章在CL过程和程序中处理目标5.1 在CL程序中访问目标在CL程序命令和过程中引用目标的原则与在每个命令和分别处理不是在程序中使用目标的原则是一样的。

目标名可用限定或非限定名,非限定目标名用库列表来查找。

在CL过程和程序中引用的大多数目标在运行引用它们时才访问。

对限定名(库名/目标名)的目标,在命令运行引用它时必须在指定的库中,但在程序生成时不一定要在此库中,即CL语句中用的大部分目标是简单地基于运行时目标的位置。

在5.1.1中给出一些特例。

如果在CL源语句中不用限定名而用库列表,就不用对所有目标做运行时的考虑。

如果在编译时用库列表,那么在运行时目标可以在库列表中的任一库里,这就要求在不同库中不能有重复的目标名。

如果用库列表,可以在过程生成和命令处理之间把目标移到不同的库中。

在命令运行时所引用的目标必须存在,而在编译时程序PAYROLL即时不存在,CL程序也能编译成功:PGM /*TEST*/DCL...MONMSG......CALL PGM(QGPL/PAYROLL)...ENDPGM实际上,在程序TEST活动时,PAYROLL不一定存在,但在处理CALL命令时要存在。

在调用程序中被调用程序的生成一定要放在CALL命令之前:PGM /*TEST*/DCL......MONMSG...CRTCLPGM PGM(QGPL/PAYROLL)CALL PGM(QGPL/PAYROLL)...ENDPGM对于生成命令,比如CRTCLPGM、CRTDTAARA,在编译和运行时所引用的目标是生成命令定义的,而不是生成的目标。

如果用生成命令,生成命令定义在编译时必须在限定命令所用的库中。

(换句话说,如果用*LIBL,它必须在库列表中)。

5.1.1 例外情况:访问命令定义、文件和过程从引用命令定义或文件的源语句生成CL程序时要下面两个东西存在:在文件生成时目标必须存在在命令引用它们做处理时目标必须存在即在用DCLF时,在生成引用此文件的程序时必须先生成文件。

AS400程序员培训手册(中级)

AS400程序员培训手册(中级)

1 简单说明 (3)2 程序代码行的编写 (3)2.1 最简单的RPGLE程序 (3)2.2 举例准备 (3)2.3 简单的程序流程 (4)2.4 常见的程序流程 (5)2.5 F行说明 (5)2.5.1 内容说明 (5)2.5.2 常用例子 (9)2.5.3 补充说明 (10)2.6 D行说明 (10)2.6.1 内容说明 (10)2.6.2 常用例子 (13)2.6.3 补充说明 (14)2.7 入口参数 (14)2.8 C行说明 (16)2.8.1 写在前面 (16)2.8.2 内容说明 (17)2.8.3 ILE操作码分类: (18)2.8.4 ILE操作码 (19)2.8.4.1 A--C (19)2.8.4.2 D--E (27)2.8.4.3 F--N (32)2.8.4.4 O--R (39)2.8.4.5 S--Z (43)3 和程序相关的数据库知识 (49)3.1 LF(逻辑文件) (49)3.1.1 逻辑文件概念 (49)3.1.2 逻辑文件对效率的影响 (51)3.2 MEMBER (51)3.3 游标 (52)3.3.1 游标的概念 (52)3.3.2 不同操作码对应的游标的处理 (52)3.3.3 “有且仅有”的游标 (53)3.3.4 LOV AL、HIV AL对应的游标操作 (53)3.4 事务处理 -- COMMIT (54)3.4.1 概念描述 (54)3.4.2 使用方法 (54)3.4.3 注意事项 (55)3.5 关于锁表的问题 LCKW (56)4 DEBUG调试以及常见出错信息 (56)4.1 写在前面 (56)4.2 常规用法 (57)4.2.1 程序编译 (57)4.2.2 执行DEBUG命令 (57)4.2.3 运行程序 (57)4.2.4 在DEBUG模式中进行调试 (58)4.2.5 跟踪被当前程序调用的程序 (58)4.2.6 一定要退出DEBUG模式 (59)4.2.7 补充 (59)4.3 跟踪批处理程序( From qingzhou) (60)4.4 常见的出错信息 (60)4.4.1 编译程序时的出错信息 (60)4.4.2 运行时的出错信息 (62)5 CL、CMD (62)5.1 CL程序 (62)5.1.1 基本认识 (62)5.1.2 CL程序的常用语法及命令: (63)5.1.3 不常用的语法 (65)5.2 CMD (66)6 屏幕文件及使用(整理中) (67)7 其它 (72)7.1 报表打印 (72)7.2 SA VF,备份与恢复 (77)7.3 菜单--MENU (78)7.4 几个命令 (78)7.5 关于代码风格的几点想法 (81)1简单说明内部交流、或可作培训使用。

RPG AS400程序员培训手册

RPG AS400程序员培训手册

2.8.4.4 O--RON-ERROR (On-Error)没用过OPEN {(E)} (Open File for Processing) 打开文件Factory 1 Operation Factory 2 Result HI LO EQOPEN 文件名OPEN 后面的目标,必须是在当前程序中已声明的文件名(不是文件的记录格式名),而且在OPEN 操作之后,在程序结束之前之前,必须有对应的CLOSE 操作。

使用OPEN 操作,文件在声明时,必须使用USROPN 关键字(详见D 行说明)。

ORxx (Or) 逻辑判断—或Factory 1 Operation Factory 2 Result HI LO EQFLD01 IFGT FLD03FLD01 OREQ FLD02等价于IF FLD01>FLD03 OR FLD01=FLD02与IF、IFxx,AND、ANDxx 类似,RPGLE 的写法OR,比RPG 的写法ORxx 要灵活,而且可以用来表达一些复杂的逻辑关系。

有鉴于此,所以通常IF 语句中,我会以OR 为主,基本不用ORxx。

如果在编程序方面,公司/项目组无硬性要求,那我觉得还是少用ORxx 吧,总觉得这种写法的逻辑关系看起来不直接,尤其是有很复杂的AND,OR 时。

OTHER (Otherwise Select) 分支语句的判断与分支语句SELECT 一起使用,表示不符合上述所有条件时的操作,如下:Factory 1 Operation Factory 2 Result HI LO EQSELECTWHEN 条件判断1处理语句1WHEN 条件判断2处理语句2OTHER处理语句3ENDSL在这个例子中,当满足条件判断1 时,运行处理语句1,运行结束后跳至ENDSL 处;如果不满足条件判断1,则程序继续向下执行,判断是否满足条件判断2。

当满足条件判断2 时,运行处理语句2,跳至ENDSL;当不满足当不满足条件判断2 时,程序继续向下执下,当读到OTHER 操作码时,无条件运行处理语句3(即当程序当前不满足以上所以条件判断时,则执行OTHER 之后的语句。

AS400程序员培训手册(中级)

AS400程序员培训手册(中级)

4.2
5
6 7Biblioteka 常规用法 .................................................................................................................57 4.2.1 程序编译 .........................................................................................................57 4.2.2 执行DEBUG命令 ...........................................................................................57 4.2.3 运行程序 .........................................................................................................57 4.2.4 在DEBUG模式中进行调试 ...........................................................................58 4.2.5 跟踪被当前程序调用的程序 .........................................................................58 4.2.6 一定要退出DEBUG模式 ...............................................................................59 4.2.7 补充 .................................................................................................................59 4.3 跟踪批处理程序( From qingzhou).........................................................................60 4.4 常见的出错信息 .....................................................................................................60 4.4.1 编译程序时的出错信息 .................................................................................60 4.4.2 运行时的出错信息 .........................................................................................62 CL、CMD ..............................................................................................................................62 5.1 CL程序....................................................................................................................62 5.1.1 基本认识 .........................................................................................................62 5.1.2 CL程序的常用语法及命令: ........................................................................63 5.1.3 不常用的语法 .................................................................................................65 5.2 CMD .......................................................................................................................66 屏幕文件及使用(整理中) .................................................................................................67 其它.........................................................................................................................................72 7.1 报表打印 .................................................................................................................72 7.2 SAVF,备份与恢复 ...............................................................................................77 7.3 菜单--MENU ..........................................................................................................78 7.4 几个命令 .................................................................................................................78 7.5 关于代码风格的几点想法 .....................................................................................81
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5 CL、CMD其实有关这一章,以及屏幕文件的,在网上已经有很多人写过了,想了想,还是说一下吧。

5.1 CL 程序5.1.1 基本认识简单的理解,CL 程序就是和RPG 相对应的,是控制语言(Control Language)。

类型为CLP、CLLE 的源代码编译出来的程序,都属于CL 程序。

可能还是不够直观,这么说吧,我们在交互式命令行上输入的命令,用程序的方式来执行,这个执行的程序,就是CL 程序。

学过UNIX 的会比较好懂,CL 程序有点类似于SHELL,不过SHELL 是可以直接执行的,而且不用编译;CL 程序需要编译,而且要用CALL 的方式来执行。

不过原理是接近的,都是在程序中直接调用命令行的语句。

所以说,CL 程序其实很好写,只要会输入命令,就可以写CL 程序了。

在编辑CL 程序时,也可以用“命令+ F4”的方式来写,不需要老老实实的整行输入。

CL 程序不像RPGLE 程序,在编写时,可以使用自由格式书写;一行的内容如果太长要,在最末尾处用“+”表示换行举个最简单的例子,比如说新建个名为FHS01CL 的CLP 源程序,代码如下:PGMWRKACTJOBENDPGM编译此程序,然后CALL 之,系统就会执行命令WRKACTJOB,查看当前的活动作业,效果与在交互式命令行下输入WRKACTJOB 是一样的。

当我们输入F12,退出WRKACTJOB 时,系统就会继续向下执行,发现是ENDPGM,表示程序结束了,于是判定执行完毕,退出至交互式画面。

5.1.2 CL 程序的常用语法及命令:一、程序的开始与结束:PGM PARM(&A &B) /* 开始CL 程序*/ENDPGM /* 结束CL 程序*/CL 程序,和RPGLE 程序一样,也可以有程序的入口参数,而且程序的入口参数都是可传递的(也就是输入的参数如果在程序中被修改过,那么原调用的程序中的相应参数也会进行变化。

不过CL 的入口参数只能为字符型,或数字型的单个字段,不能象RPGLE 程序中那么多样化(字段、结构、数组、指针)。

如果CL 程序没有入口参数时,那么就可以不需要后面的PARM 语句,直接写成PGM即可。

写CL 程序时,不妨多使用F4,看看系统的帮助,这样就不用记那么多命令的参数名。

二、变量及其定义CL程序中的所有变量,都使用&做为前缀,这一点与RPGLE 程序不同。

比如说PGM PARM(&A &B)就表示入口参数为A、B 这两个变量在CL 程序中使用到的变量,都必须使用DCL 语句来定义:DCL VAR(&FLD01) TYPE(*CHAR) LEN(10)DCL VAR(&FLD02) TYPE(*DEC) LEN(10 2)上述语句表示:定义变量FLD01,10 位长的字符型变量定义变量FLD02,10 长,其中2 位小数的数字型变量除了字符、数字之外,CL 程序还可以定义逻辑变量(*LGL),逻辑变量允许的值只能为’1’或’0’。

不过通常有字符与数字也就够了。

CL 程序的主要功能在于进行命令处理,而不是处理字符串以及数据库三、CL 常用命令:CHGVAR -- 变量赋值CHGVAR VAR(&FLD01) VALUE(‘ABCD’)即是将变量FLD01 赋值成为’ABCD’(左对齐),同理,VALUE 的括号中也可以填写一个变量,即表示将此变量的值赋值到变量FLD01 中。

数字型变量的赋值同样也是使用CHGVAR 语句。

当变量中只包含数字时(0—9),数字型变量与字符型变量可以使用CHGVAR 语句进行转换,这一点与RPGLE 中的MOVE 语句比较类似。

IF -- 条件判断语句IF COND(&FLD01 *EQ '1') THEN(CHGVAR VAR(&FLD02) +VALUE('0'))当变量FLD01 等于’1’时,将变量FLD02 中的值更改为’0’THEN 后面,即是当符合条件时,要执行的命令。

写起来其实没有看上去那么复杂,多用F4 就会发现CL 程序写简单。

就比如上例,先写IF,然后按F4,在Condition 处填写条件语句,然后在Command 处填上CHGVAR,再按F4,再去填相应的处理语句,这样写,就比直接把整句抄下来就简单多了。

上面这种写法,只能在符合条件时,执行一条CL 语句;如果要执行多条,就必须写做:IF COND(&FLD01 *EQ '1') THEN(DO)CHGVAR VAR(&FLD02) VALUE(‘0’)其它执行语句ENDDO也就是THEN 后面,用DO,表示接下来的语句都是在这个IF 条件成立时才执行(DO)的。

然后结束处用ENDDO,必须要有。

ENDDO 在这里和循环没有任何关系,表示的是ENDIF 的意思,但是CL 语句里没有ENDIF,只有ENDDO。

IF 语句中,表示判断的关键字与RPGLE 中的Ifxx 操作码类似,有*EQ *GT *LT *GE *LE *NE用来表示逻辑关系的关键字有*AND, *OR, *NOTGOTO -- 跳转语句GOTO 语句与RPGLE 中的GOTO 是一样的,都是跳转的意思。

FHSTAG:GOTO CMDLBL(FHSTAG)注意,这里定义标签是用“:” 冒号MONMSG -- 监控错误信息我们使用CL 语句时,执行的命令可能会报出一些异常错误,从而导致整个程序中断,需要手工干预。

MONMSG 命令可以监控我们预定的错误信息,使CL 程序正常的向下运行。

举例而言,如果CL 程序中有如下语句:CALL PGM(FHS01R)MONMSG MSGID(CPF4131)则表示当系统调用程序FHS01R 时,如果发现有CPF4131(声明的文件重新编译过,但程序未重新编译)的错,那么CL 程序将不会异常中断,仅仅只是不运行程序FHS01R,然后继续向下执行CL 程序MONMSG 还可以用于在监控到错误信息之后,进行处理,如下:CALL PGM(FHS01R)MONMSG MSGID(CPF4131) EXEC(CHGVAR VAR(&FLD01) +VALUE('0'))这句话就表示当发现有CPF4131 的错误之时,将变量FLD01 赋值成为’0’如果要执行多句的话,和IF 语句的方法类似,也是使用DO 与ENDDO MONMSG MSGID(CPF4131) EXEC(DO)CHGVAR VAR(&FLD01) VALUE(‘0’)其它处理语句ENDDO5.1.3 不常用的语法%SST -- 取字符串CHGVAR VAR(&FLD01) VALUE(%SST(&FLD02 3 1))表示将字符变量FLD02,从第3 位开始,取1 位,左对齐赋值到变量FLD01 中。

%SST 的括号的参数中,第一个参数必须为字符型变量,第二个参数表示起始位,第三个参数表示要截取的长度。

*CAT -- 拼字符串DCL VAR(&FLD01) TYPE(*CHAR) LEN(10)CHGVAR VAR(&FLD01) VALUE('A' *CAT 'B')即表示将10 位长的字符型变量赋值成为’AB ‘‘A’,‘B’,也可以使用变量,如CHGVAR VAR(&FLD01) VALUE(&FLD02 *CAT &FLD03)要注意,*CAT 不能去掉字符串末尾的空,从效果上来看,有点类似于RPGLE 中的EVAL 操作码,而不是CAT 操作码+、-、*、/ -- 数学运算数字型变量,可以进行数学运算CHGVAR VAR(&FLD01) VALUE(&FLD01 + &FLD02)即等同于RPGLE 程序中的EVAL FLD01 = FLD01 + FLD02同理,-、*、/ 分别对应减、乘、除不过数学运行常用于RPGLE 程序中,较少用在CL 控制里面,这里只是介绍一下。

读取文件:(From Cuer:P1421)DCL VAR(&FLD01) TYPE(*CHAR) LEN(2)DCLF FILE(FHSLIB/PFFHS)RCVFCHGVAR VAR(&FLD01) VALUE(&FHS01)以上这段CL 的意思,就是在CL 程序中读取PFFHS 文件,然后将读到的第一条记录赋值到CL 的临时变量FLD01 中。

如果要将一个文件从头读到尾,则可以用如下语句来实现:DCLF FILE(FHSLIB/PFFHS)LOOP:RCVFMONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(EXIT))读取到每条记录后的处理语句GOTO CMDLBL(LOOP)EXIT:也就是说,信息CPF0864,即表示未读取到记录。

在CL 程序中声明文件使用DCLF 语句,一个CL 文件中只能声明一个文件,声明语句必须在CL 控制语句之前。

使用声明的文件中的字段,同样需要在字段名前加上“&” ;CL 程序中,无法控制游标,无法对记录进行定位操作。

所以CL 程序对文件的操作是比较弱的,通常我最多只用来读取某些只含少量记录的参数文件。

5.2 CMDCMD 是用来生成命令的,执行后可以像其它系统命令一样,直接输入命令,或是F4,不需要像CLP 一样,要CALL 一下。

其实CMD 本质上也是执行CLP 或RPGLE(在编译时指定),用起来,无非就是好看点,直接一些,除此之外的意义,似乎也就没什么了。

举个例子,比如我们查看一个文件中的内容时,可以使用SQL 来查看,也可以使用命令RUNQRY 命令来实现(RUNQRY QRYFILE(文件名))。

但在我们要频繁查看文件时,这两种方式似乎都不是很爽,也就是说要输入的内容都不是最少的,那我们可以设计一个CMD,譬如说叫SEE,希望实现的最终效果,是在命令行输入“SEE 文件名”,就可以查看PF 文件中的记录。

那么,我们按如下步骤来实现:1. 建立一个CLP 程序,比如叫SEECLP,代码如下PGM PARM(&FILENAME)RUNQRY QRYFILE(&FILENAME)ENDPGM2. 编译此程序3. 建立一个CMD 程序(即源代码的属性为CMD),代码如下:CMD PROMPT(' 显示文件记录')PARM KWD(NAME) TYPE(*CHAR) LEN(10) MIN(1) +CHOICE(' 显示文件记录内容') +PROMPT('Display file record')4. 编译此CMD,用F4,可见如下画面:Create Command (CRTCMD)Type choices, press Enter.Command . . . . . . . . . . . . > SEE NameLibrary . . . . . . . . . . . > FHSLIB Name, *CURLIBProgram to process command . . . > SEE Name, *REXXLibrary . . . . . . . . . . . > *LIBL Name, *LIBL, *CURLIBSource file . . . . . . . . . . > FHSFILE NameLibrary . . . . . . . . . . . > FHSLIB Name, *LIBL, *CURLIBSource member . . . . . . . . . > SEE Name, *CMDThreadsafe . . . . . . . . . . . *NO *YES, *NO, *COND其中,蓝色字体显示的,就是我们需要输入这个CMD 要调用的程序名(默认值与CMD同名),这里我们将此项内容填为SEECLP,表示SEE 这个CMD,调用的是SEECLP 这个程序5. 编译成功之后,我们在命令行执行“SEE 文件名” ,就可以看到指定文件的记录。

相关文档
最新文档