AS400开发初阶.docx

上传人:b****3 文档编号:24846098 上传时间:2023-06-02 格式:DOCX 页数:26 大小:25.25KB
下载 相关 举报
AS400开发初阶.docx_第1页
第1页 / 共26页
AS400开发初阶.docx_第2页
第2页 / 共26页
AS400开发初阶.docx_第3页
第3页 / 共26页
AS400开发初阶.docx_第4页
第4页 / 共26页
AS400开发初阶.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

AS400开发初阶.docx

《AS400开发初阶.docx》由会员分享,可在线阅读,更多相关《AS400开发初阶.docx(26页珍藏版)》请在冰豆网上搜索。

AS400开发初阶.docx

AS400开发初阶

 

AS/400开发初阶

 

1OS/400

1.1基本系统概念

●对象

AS/400的操作对象称为:

Object。

Object包括的信息:

1.包含该对象的库

2.对象名

3.对象类型(*PGM,*FILE,…)

4.对象的属性(对于*FILE,有LF,PF-DTA,PRTF,DSPF)

5.拥有该对象的用户权限

AS/400的对象由(库/对象名/对象类型)唯一确定。

查看某对象:

WRKOBJ

●库

库也是一种对象,相当于AS/400的目录。

DOS目录有多级,即目录下有目录。

但库只有一级,库下不能有库。

AS/400的文件系统只有3级:

库->文件->成员;

例如在APPLIB库下有APPPF的文件,表示为APPLIB/APPPF。

创建库:

CRTLIB

●库列表

相当于作业的工作目录,类似于DOS的PATH

当前作业库列表的常用命令:

dsplibl

edtlibl

addlible

●汉字支持

使用汉字支持:

CHGSYSLIBLQSYS2989

不使用汉字支持:

CHGSYSLIBLLIB(QSYS2989)OPTION(*REMOVE)

●命令菜单

OS/400中,进入一个菜单,用gomenuName

查看某一相关的命令

goCMDxxxxxx代表命令含义的缩写,例如想看与库有关的命令,gocmdlib

1.2作业

⏹概念

作业:

AS/400所有程序运行以JOB方式

命令:

wrkactjob

子系统(subsystem):

在OS/400中的一个作业运行环境,该运行环境定义一定的资源,如CPU,内存,IO等。

在OS/400中可以定义多个子系统

作业标识:

Jobname/Jobuser/JobNumber

F11可看到

5-workwith看

作业类型:

BCH,INT

作业功能:

PGM-QEZSCNEP,CMD-WRKACTJOB,MNU-MAIN

作业状态:

RUN,DSPW,DEQW,MSGW

⏹常用命令

管理活动作业:

wrkactjob

管理某一作业:

wrkjobjob(Number/User/Name);

管理当前作业:

wrkjob;++3进入dspjob命令

终止作业:

wrkactjob+4+option(*immed);

终止当前作业的当前运行程序(例如程序死锁):

++2*immed

查看作业日志:

dspjoblog;wrkjob;++3先进入dspjob命令,在选10

查看作业打开的文件:

dspjoblog+14

查看作业的库列表:

dspjoblog+13

当查看JOB的LOG的信息

1.显示作业的LOG列表

2.将光标移到某行信息,按F1看详细信息

3.看该信息由那一程序产生。

再按F9

4.AS/400的信息文件(MSGF,由应用EC/系统定义)

WRKMSGF命令

后台业务系统的MSGF:

EC

常用系统MSGF:

QCPFMSG

1.2.1程序开发

1.2.2PDM介绍

PDM是AS/400的集成开发环境

AS/400的程序文件结构

库(libraries)/源码文件(objects)/源码成员(members)(程序源码)

使用PDM

1.进入PDM命令

STRPDM 

2.显示PDM的菜单,选1,并键入指定源码库

3.显示该指定源码库

(1)按F6,创建新源码库

(2)在指定的库,键入12,进入该源码库

4.显示该指定源码库的所有源码文件

(1)按F6,创建新源码文件

(2)键入12,进入指定的源码文件

5.显示该源码文件下的所有源码成员

(1)按F6,创建新的源码成员

(2)键入2,编辑源码

(3)键入3,拷贝源码

(4)键入4,删除源码

(5)键入5,显示源码

6.退出PDM

(1)按F12,退回上一级

(2)按F3,退到PDM菜单

1.2.3AS/400的源码编辑器

*启动编辑器:

STRSEU命令/PDM

*编辑界面分三部分

行序号——系统产生

数据内容——用户编辑

最后修改日期——系统产生

*左移屏幕F19;右移屏幕F20;

*编辑命令(在行序号上敲入命令)

1.位置

A-在当前行后

B-在当前行前

2.插入行

I-在当前行后,插入一空行

3.删除行

D-删除当前行

4.删除行块

DD-在行块的首行位置,键入DD

DD-在行块的尾行位置,键入DD

回车

5.拷贝行

C-在要拷贝的行位置,键入C

A/B-拷贝到目标位置的后/前

回车

6.拷贝行块

CC-在行块的首行位置,键入CC

CC-在行块的尾行位置,键入CC

A/B-拷贝到目标行位置的后/前

回车

*存盘

在SEU命令行,键入SAVE

*退出SEU

F3

1.2.4AS/400的程序

*程序类型

C

CL

CLLE

RPGLE

*创建程序源码

2.创建一个源码库

CRTLIBLIB(MYLIB)

3.创建一个源码文件

CRTSRCPFFILE(MYLIB/MYSRCPF)RCDLEN(112)IGCDTA(*YES)

4.创建一个源码成员

STRSEUSRCFILE(MYLIB/MYSRCPF)SRCMBR(MYSRCMBR)TYPE(RPGLE)

备注:

(1)源码文件其实是一种类型的数据库文件,该数据库的记录结构由3个字段构成:

字段名类型 长度

SRCSEQ数字6,2源码行序号

SRCDAT数字6源码行最后修改日期

SRCDTA字符100源码行内容

编写源码行,就相当于往数据库添加记录

(2)程序源码是源码文件中的一个源码成员,源码文件可以包括多个源码成员

*程序编译

RPGLE程序,使用CRTBNDRPG命令

CRTBNDRPGPGM(PGMLIB/MYPGM)SRCFILE(MYSRCPF/MYSRCMBR)

SQLRPGLEC程序,使用CRTSQLRPGI命令

CL,CLLE程序,使用CRTBNDCL命令

PDM中,编译快捷命令

14编译

CPRPGLE的编译

CQSQLRPGLE的编译

*程序编译出错

查编译信息:

使用编译产生的SPOOLFILE,它是一个文本文件,报告编译过程中的相关信息。

用WRKSPLF命令,列出本交互作业的所有SPOOLFILE,找出名字与程序名字相同的最后一个SPOOLFILE,就是最后一次编译所产生的SPOOLFILE。

查看一般流程:

1.进入SPOOLFILE

2.在Control栏敲入”b”,(bottom),翻到SPOOLFILE的最后

3.在MessageTotals:

项中,如果没有(警告/错误/严重错误)的信息,则表示编译通过

Warning(10).......:

0

Error(20).......:

0

SevereError(30+)......:

0

4.如果编译不通过,往前翻一页,按PgUp键,查看错误报告

MsgidSvNumberMessagetext

*RNF703100108xxxxxxxx

*RNF7066001xxxxxxxx

*RNF7030301xxxxxxxx

5.注意”Sv”中,不为00的项目,即为编译不通过错误语句

6.查看源码中错误语句,在Find栏中,敲入”Sv”不为00的Msgid,例如RNF7030,然后按F16搜索源码,定位在出错的源码语句

7.退出SPOOL FILE,重新进入源码编辑,修改源码

8.重新编译

*程序执行

CALL PGM(MYLIB/MYPGM)PARM(“PARM1”“PARM2”“PARM3”)

*程序调试

使用源码调试的程序,使用编译命令编译时参数DBGVIEW不能为*STMT

(1)启动调试

STRDBGPGM(PGMLIB/PGMOBJ)UPDPROD(*YES)

(2)设置调试断点

将光标停在断点源码行,按F6。

如要取消断点,再按F6

可以设置多个断点

(3)完成设置断点后,退出

(4)调用程序,进入程序并停在断点

CALLPGM(BANKOBJ/MYRPGLE)

(5)调试命令

*单步执行F10

*多步执行F12

*可以重新设置/取消断点F6

*显示变量值VAR1

方法1.将光标移到该变量VAR1,按F11

方法2.在debug命令行,键入EVALVAR1

*改变变量值VAR1

EVALVAR1=xxxxxx

(6)退出程序

F3

(7)结束调试

ENDDBG

2DB2/400简介

2.1DDS简介

DDS(数据描述规范)是一种源码,是创建物理文件、逻辑文件、显示文件等源码。

使用PDM编写DDS

2.2创建一个物理文件PF

物理文件是存放实际数据的数据库文件。

源码类型:

PF

PFDDS的内容分4部分

(1)文件级关键字

作用范围:

整个PF

REF(PFNAME)字段定义参照自PFNAME的字段

UNIQUE控制索引键字唯一

(2)记录定义

*定义记录

名称类型为R

RRCDNAME

*记录级关键字

FORMAT(PFNAME)记录结构参照自PFNAME的记录结构

….

(3)字段定义

*字段名

*字段类型

P-压缩型数字

S-区位型数字

‘’或A-字符

L-日期

T-时间

O-支持汉字的字符

*字段级关键字

COLHDG(‘字段描述’)

(4)索引键字

如果有索引键字定义,则该数据库文件包含索引

名称类型为K

可以有多个键字

编译DDS,创建PF

CRTPF命令

或14

2.3创建一个逻辑文件LF

逻辑文件是索引文件

(1)文件级关键字

UNIQUE控制索引键字唯一

(2)记录级关键字

PFILE(PFNAME)逻辑文件对应的物理文件

(3)索引键字

名字类型K

可以有多个索引键字

2.4DB2的常工具

⏹RUNQRY

浏览数据库文件

RUNQRYQRYFILE((AM1))

RUNQRYQRYFILE((AM1))RCDSLT(*YES)

⏹UPDDTA

UPDDTAFILE(BANKDTA/MYPF)

增加/更新/删除记录

1.F9当前插入记录

2.F23删除当前记录

3.回车更新当前记录

4.F3退出

⏹STRSQL

执行SQL语句

3RPG语言

RPGLE的结构分为以下几部分

3.1H定义

3.2F数据库引用

每一行F源码结构:

FNameTypeDesigEOFA/USeqFmtLmtsRATDeviceKeywordsComment

定义格式:

●文件名字

●使用类型

I只读

O只写,不能更新

U更新

●文件指定

F全过程文件

●文件添加

A文件可以进行记录

●文件格式

E外部描述文件

●地址类型

空不使用索引语句,不能用CHAIN,SETxx语句

K使用索引语句

●设备

DISK数据库文件

●关键字

PREFIX(xxx)引用数据库字段前加前缀xxx

COMMIT使用数据更新的确认/回滚机制

程序中使用COMMIT,该作业必须事先启动COMMIT控制

启动COMMIT:

STRCMTCTLLCKLVL(*CHG)

关闭COMMIT:

ENDCMTCTL

USROPN用户程序自定义打开。

如果没有该关键字,程序打开时就打开文件。

3.3D数据定义

每一行D源码结构:

NameES/UTypeFromTo/LengthDataTypeDecPosKeywordsComment

3.3.1定义格式

●数据名称

●说明类型

C常量

S独立变量

DS数据结构

●长度

●数据类型

空/A字符

D日期

P/S压缩/区位数字

T时间

*指针

●小数位长度

●关键字

3.3.2例子

●定义常量

NameTypeTo/LengthDataTypeDecPosKeywords

C_VARC'HELLO'

●定义字符变量

NameTypeTo/LengthDataTypeDecPosKeywords

V_STRS10A

●定义数值变量

NameTypeTo/LengthDataTypeDecPosKeywords

V_NUMS14S2

小数点定义要右对齐、

●定义日期变量

NameTypeTo/LengthDataTypeDecPosKeywords

V_DATESD

系统默认使用*ISO日期格式,即2002-09-21格式

●定义时间变量

NameTypeTo/LengthDataTypeDecPosKeywords

V_TIMEST

●定义数组

定义有10个元素的字符数组

NameTypeTo/LengthDataTypeDecPosKeywords

V_DIMS10ADIM(10)

数组元素使用,建议使用RPGIV的格式。

V_DIM(N)

●定义数据结构

NameTypeTo/LengthDataTypeDecPosKeywords

ACCTDS

CUNO10A

ACSF5A

3.4C计算逻辑

3.4.1常用C源码结构

每一行C源码结构:

LvlN01Factor1OpCodeFactor2ResultLenDecHiLoEqComment

●指令因子1

●指令操作码

●指令因子2

●执行结果

●长度

如果执行结果字段不是在D数据定义部分定义的,这需要在该行源码定义

●小数位长度

如果执行结果字段不是在D数据定义部分定义的,这需要在该行源码定义

●Hi指示器

Hi指示器。

指示器的概念:

对于执行了某些RPG指令,系统将视情况改变指示器的值。

指示器只有两个值:

*ON/*OFF,或者’1’/’0’

例如按某索引键字定位数据库文件某一记录

Factor1OpCodeFactor2ResultHiLoEq

KEYCHAINRCD80

该语句定义了*IN80指示器。

数据库PF不存在有KEY这个索引键字的记录,则*IN80被系统置为*ON;否则置*OFF

●Lo指示器

●Eq指示器

3.4.2程序参数

Factor1OpCodeFactor2ResultHiLoEq

*ENTRYPLIST

PARMparm1

PARMparm2

3.4.3子例程

子例程

*概念:

相当于程序里的过程

*使用:

(1)定义子例程代码段

在程序最后定义:

形式

Factor1OpCodeFactor2ResultHiLoEq

SRNAMEBEGSR

….//子例程代码

ENDSR

(2)执行子例程

Factor1OpCodeFactor2ResultHiLoEq

EXSRSRNAME

自定义子例程

有(1)部分,也有(2)部分

系统子例程

有(1)部分,但由系统执行

*INZSR-程序的初始化,执行程序首先执行该子例程

3.4.4调用其他程序

Factor1OpCodeFactor2ResultHiLoEq

CALL‘PGMNAME’

PARMPARM1

PARMPARM2

3.4.5程序分支

●逻辑表达式

使用OR、AND、NOT

●IF选择语句

IF/ENDIF

例子:

Factor1OpCodeFactor2ResultHiLoEq

IFVAR1=’var1’OR

VAR2=’var2’

ENDIF

●SELECT多项选择语句

SELECT/WHE/OTHER/ENDSL

例子:

Factor1OpCodeFactor2ResultHiLoEq

SELECT

WHENVAR1=’var1’ANDVAR2=’var2

WHENVAR1=’rav2’

OTHER

ENDSL

●DOW循环语句

DOW/ENDDO

例子:

Factor1OpCodeFactor2ResultHiLoEq

DOWNUM1<=50ANDNUM1>10

IFNUM1<=30ANDNUM1>20

ITER//重新回到循环开始

ENDIF

IFNUM1<40ANDNUM1>35

LEAVE

ENDIF

ENDIF

●GOTO跳转

(1)定义跳转标签

Factor1OpCodeFactor2ResultHiLoEq

T_ENDTAG

(2)执行GOTO

Factor1OpCodeFactor2ResultHiLoEq

GOTOT_END

3.4.6程序退出

EVAL*INLR=*ON

RETURN

3.4.7数据库操作

3.4.7.1检索记录

●使用检索条件

*对于不使用索引的数据库,RPG程序中不能检索记录,只能顺序存取记录。

*对于使用索引的数据库,RPG可以检索记录

●精确定位检索方式

直接按键字定位记录,并读取记录数据

使用CHAIN指令

Factor1OpCodeFactor2ResultHiLoEq

K_AMCHAINRAM80

系统先将*IN80初始化为*OFF

如果找到记录,则*IN80=*OFF。

找不到记录,则*IN80=*ON

使用%FOUND,代替指示器操作

●模糊定位检索方式

分两步:

1.先按键字模糊定位记录,使用SETLL、SETGT指令

例如:

有一PF(记录格式名RCD)有三条记录:

KEY1RECORD1

KEY2RECORD2

KEY3RECORD3

◆使用SETLL情况:

执行:

Factor1OpCodeFactor2ResultHiLoEq

KEY2SETLLRCD

KEY1RECORD1

存取游标—>

KEY2RECORD2

KEY3RECORD3

◆使用SETGT情况:

执行:

Factor1OpCodeFactor2ResultHiLoEq

KEY2SETGTRCD

KEY1RECORD1

KEY2RECORD2

存取游标—>

KEY3RECORD3

 

2读取邻近记录,使用READ、READE、READP、READPE指令

例子:

假设游标已经停在KEY2和KEY3之间。

◆READ

往下读取一条记录

Factor1OpCodeFactor2ResultHiLoEq

READRCD80

将读取到KEY3的记录

◆READE

往下读取指定键字的记录

Factor1OpCodeFactor2ResultHiLoEq

KEY3READERCD80

将读到KEY3的记录

Factor1OpCodeFactor2ResultHiLoEq

KEY2READERCD80

将读不到记录,*IN80=*ON

◆READP

往上读取一条记录

Factor1OpCodeFactor2ResultHiLoEq

READPRCD80

将读取到KEY2的记录

◆READPE

往上读取指定键字的记录

Factor1OpCodeFactor2ResultHiLoEq

KEY2READPERCD80

将读取到KEY2的记录

Factor1OpCodeFactor2ResultHiLoEq

KEY3READPERCD80

将读不到记录,*IN80=*ON

3.4.7.2更新记录

使用UPDATE指令,分两步

1.必须用CHAIN精确定位要更新的记录

2.UPDATE

Factor1OpCodeFactor2ResultHiLoEq

UPDATERAM

3.4.7.3写记录

使用WRITE指令

Factor1OpCodeFactor2ResultHiLoEq

WRITERAM

3.4.8常用RPG操作码

●MOVE

用于字符/数值/日期等类型

⏹MOVE

Factor1OpCodeFactor2ResultLenHiLoEq

MOVE‘HELLO’STR110

STR1=’HELLO’

⏹MOVEL

Factor1OpCodeFactor2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1