版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 1 / 16 SAP-ABAPBAP 开发入门到进阶开发入门到进阶基础篇 - 以简短的篇幅介绍最基本的语法增强篇 - 介绍了常用的 ABAP 技术希望此书对想从事 ABAP 开发的读者有相当帮助。一一. .基础篇基础篇 如果读者已经有一定 ABAP 经验,可不看此篇,在此篇中,花了很少篇幅回顾ABAP 编程的基本常识,读者如有其他开发工具的知识,花很少时间就可理解这些常识.1.1.什么是什么是 ABAPABAP ? ?了解一下 ABAP 的发展历史是必要的,ABAP 产生的最初的目的是用以生成简单打印报表程序,我们知道 SAP 最初是为解决财务实时数据处理问题的,ABAP(Advanced
2、Business Application Programming-高级业务应用编程语言)现在用于编写 SAP AG 的几乎全部产品源代码.严格地讲,ABAP/4 不仅仅是一个开发工具,而且是一套完整的 client/server开发环境,这很好理解,微软的 Visiual Studio 是一开发环境,VB,VC+等是开发工具.ABAP 开发环境包含支持程序开发的一些函数和包等. 如图 1-1,是 SAP 开发环境的一个三层架构的例图,三层(多层)的概念也不新鲜,比如在安装 SAP 时也可将 DB instance 安在一台 server, Central instance 在另一台所谓的 Ap
3、plication server(我想这应是相关 SAP 基础系统包括各种应用程序所在),而通常客户端安装的 SAP Logon Front End,SAP 会话管理器等是所谓的表示层,它通过 TCP/IP,SAP 演示协议或 RFC 和应用服务器进行数据传输,用户看到的只是处理后的数据返回. 和 Delphi 的三层逻辑相近,在应用层包含多个组件象 ABAP 开发平台,身份验证,系统管理维护等用以处理会话,更新,排队,网关,数据层处理 native 和 Open SQL 等(这是从部机制方面看),SAP 各模块应用的业务逻辑都在应用层被处理(从用户角度)然后结果被返回. 2 / 16图 1-
4、2 是 SAP Logon 的一个截图,1表示应用服务器(通常企业为了节省成本和方便管理可能会将应用服务器和数据库安装在同一起),2System number,举个实例,开发和测试服务共用一台服务器,开发使用 system number00,而测试使用 system number 01,通过 system number 逻辑地将一台 physical server 逻辑地分成了两台application server. 学习 ABAP 并不难,有人说 SAP 系统重在管理思想,不在技术,通常对有编程经验的读者不用任何培训参考一些相关资料就可立即上手. 简单介绍下 ABAP/4 的一些特征:1.
5、和 SAP 紧密结合,尤其在开发报表方面,坦率地讲,除了和 SAP 集成的好处,.我定认为 ABAP 在报表开发上比 Crystal reportTool 要高效简单.2.和 VB 一样 ,ABAP 是解释形的,如读者精通 VB,学习 ABAP 应该豪不费力,倒是既然 SAP 是企业管理解决方案,ABAPer 必须对企业管理流程熟悉. 3 / 16 解释性的另一好处是可以很好跟踪程序逻辑(使用/H),这对了解业务逻辑的实和追踪错误很有效. 和 VB 不同的是,VB 跟踪时允许程序运行指针随意往回或往全拉而 ABAP 程序去不行, 但是 ABAP 程序允许在运行时修改变量的值,这是编译程序不能做
6、到的. 当然通常编译比解释执行的速度会更快.ABAP 程序执行并不直接读取源代码,而是执行部经过“生成”的描述,对于ABAP/4 字典的修改激活后将触发部描述的重新生成,如程序并没激活就执行原版本,或者出现错误(程序没激活可能造成 ABAP Dumping ABAP). 3.在对数据库处理方面,除了可直接执行 SQL(使用 native sql,缺点是错误处理很难控制,相当于有开发环境将 SQL 语句直接传给 DB 去执行),SAP 在 ABAP 开发环境层还提供了一套 Open SQL 访问底层数据库. 4. 程序员都知道 Windows 平台下开发都支持事件驱动,Windows 系统本身也
7、支持事件驱动,ABAP 也提供了事件驱动,这表现在 Dialog 编程方面,但是 ABAP 在此方面并不强,而且相对讲也比较难于掌握(在后面会讨论). 5.基于面向对象的风靡,ABAP 在此方面也有相当反应,在 SAP 强大的软件包中提供了大量可重复使用的程序,读者也可定义类并使用它快速建立新的对象.6.类似 Java,ABAP 开发的程序能运行于任何操作系统(Java 有 Java 虚拟机,ABAP也有 ABAP processor),多种数据库(比如在 ABAP 字典中实现了透明表对各种底层数据库表的映射,这样在 ABAP 层看到的透明表就和具体数据库无关),各种网络系统.图 1-3 是一
8、个 ABAP 开发和运行环境的图例. 1 1 使用 C|C+建立 ABAP 开发工具,数亿行 ABAP source code 组成 SAP AG 多个产品. 姑且不论国 ERP 产品设计在解决企业流程上的局限性,在大多数国外的 ERP 产 4 / 16品中我们都可看到结合自身 ERP 自带的开发工具,在技术上这也是落后人家.所以建议国 ERP 界能少谈点象什么”不上 ERP 等死,上 ERP 找死”,”百分之百的企业上ERP 都失败”诸如的空洞口号(实际上我并不知道他们是凭什么得出这样的结论的),多干点实际的事情.2 2 既然 ABAP 是解释型的,运行速度会有影响吗?我想多少会有的,为了解
9、决这个问题,除了要加大相关服务器存外(相对日新月异的硬件技术这已非主要瓶颈),SAP 本身在提高性能也提供了相当的 ABAP 技术,比如使用 Cluster table, Pooled table 和 Logical database ,在接下来会有详细介绍.2.ABAP2.ABAP 开发环境的建立开发环境的建立 一个 ABAP 顾问和我讨论说,大学毕业我做 ABAP 开发不久做了顾问,薪资相当可观,最要好同学在 unix 平台下写 Cobar 组件, 薪资却并不理想. 从技术角度,我认为使用 C+写组件肯定比 ABAP 开发难度要高,用其人话说他是坐的庙好.是的,SAP 行业特别是早些年是个
10、被异化的行业,人们可看到某些人出于经济目的铺天盖地的对 ERP 不正确的宣传,这同样反应在 IT 各行业,”拿到 XX牌 Route 认证,拿到 XX 网络认证,拿到 XX 数据库认证,拿到 XX 管理学位年薪基本的都在十几万以上”,现在人们发现实际不是这回事,从现在,SAP 也已经开始降温了,我想这趋势还会持续. 和学习其它语言唯一不同的是,ABAP 是集成在 SAP 基础平台系统中的,为了学习 ABAP,你必须安装一套 SAP(可选择可选择 R/3,miniSAP,R/3,miniSAP,或或 IDESIDES),而通常的情况是安装光盘渠道比较难找(只有一些大企业实施了只有一些大企业实施了
11、 SAPSAP 才可能有才可能有, ,而且还必须注意问题而且还必须注意问题, ,其他开发工具随其他开发工具随便都可找到安装程序便都可找到安装程序),对想学习 ABAP 的程序员这是个主要门槛. 掌握基本的 ABAP 开发环境对 ABAPer 是有益的,似乎多数 ABAPer 对底层并不感兴趣,3.3.获得获得 AccessAccess KeyKey . .4.ABAP4.ABAP workbenchworkbench 和和 ABAPABAP dictionarydictionary 5 / 165.5.第一个程序第一个程序-Hello-Hello World.World. 如何进行 ABAP
12、开发呢?本节使用老套的做法,介绍如何建立一个”Hello World”的 ABAP 程序, 为了让读者尽快掌握 ABAP 开发熟悉 ABAP 开发环境是必须的,请看图图 1.5-11.5-1.程序的原代码如下:ReportReport ZHELLO.ZHELLO. 6 / 16WriteWrite HelloHello World!.World!.按 F8 运行,运行成功在屏幕上显示 Hello World!的字样,恭喜你,第一个程序运行成功.6.ABAP6.ABAP 语法简介语法简介数据类型控制流程文本摘要输出格式程序调试7.Open7.Open SQLSQL 和和 NativeNative
13、 SQLSQL8.8.表和工作区表和工作区9.9.使用字段符号使用字段符号10.10.模块化程序模块化程序11.11.文件处理文件处理12.12.簇数据库和逻辑数据库簇数据库和逻辑数据库13.13.消息和错误处理消息和错误处理尽管消息这词还用在其他地方比如 PO,SO 打印 等所谓的 output message(请看 ABAP 百夜谈),系统出现异常,在这里消息只谈在程序运行逻辑异常处理时的消息.1 1 定义消息定义消息( (参考图参考图 7-7).7-7).使用 Tcode SE91 可自定义包含多消息号的消息类,在图 7-7 中就定义了一个消息类ZFIMSG,同时消息号 017 中使用了
14、俩&消息变量2 2 运用消息运用消息. .1.可在程序Title中使用MESSAGE-ID加入消息类.REPORT ZMSGTEST MESSAGE-ID ZFIMSG .MESSAGE I017.使用消息 IMG 有这样的画面,12的 appl 和 work area 实际上对应的就是程序的message_id(SE91:message class). 7 / 162.在程序 Title 中定义直接在语句中使用.REPORT ZMSGTEST .MESSAGE I017(ZFIMSG).1. 将变量赋给消息.REPORT ZMSGTEST .MESSAGE I017(ZFIMSG)
15、with Var1 Var2 Var3 .或者MESSAGE ID ZFIMSG TYPE I NUMBER 0171 with Var1 Var2 Var3 .尽管 017 只定义了两消息变量,但是可 With 多个值,当然只有前俩生效.4.SAP 程序消息类型有下列几种.I:信息窗口 W:警告 E:错误 S:成功 A:终止程序或 Tcode X:未知.5.和标准 SAP 一样,你可配置消息,比如你需要由用户决定消息类型,使用下面程序.PROGRAM ZMSGTEST .CALL FUNCTION READ_CUSTOMIZED_MESSAGE EXPORTING I_ARBGB = ZFI
16、MSG I_DTYPE = I_MSGNR = 017 IMPORTING E_MSGTY = SY-MSGTY.假设你做了 Tcode 和 OBA5 一样可配置消息类型,在程序中你就可根据返回值 SY-MSGTY 判断下步工作,E 停止处理,A 退出程序等.在标准程序中,接下来会 PERFORM MESSAGE_SEND 来决定发送消息类型.3常用消息表格和各模块常用消息配置Tcode. 在消息配置中,Application Area和SE91的Message Class实际上是同一概念.1 1消息相关最常用的消息相关最常用的table:table:T100: SAP能用到的消息都应该在此表
17、中找到.T160M :MM模块相关消息表,此表可完全直接维护.就是说只要记住它,MM的消息配置直接使用SE16就可以.T100C: FI模块中用户自定义的消息,比如使用OBA5, OFMG等自定义的消息会写入此表,CO配置消息不在此表.T100S: 此表保存着允许用户更改的应用区域和消息号,举例假设你删除了KI 005则在OBA5中再不能配置此消息.(对MM模块有些例外,M7不在此表,使用OMCQ依旧可设置,M3不 8 / 16在此表,OMT4依旧可设置)此表也可直接维护.和T160M不同的是,你必须在SE16输入T100S按新建按钮 才可维护.查询时只可Display.T100U: 哪个用户
18、最后更改了消息,从此表能找到.T100W: For Workflow2 2常用常用Tcode(Tcode(部分部分):):FI:OBA5|OFMG|OFPM MM: OMRM|OKZZ|OMT4|OMCQ |O04C|SD:OVAHCO:OPR4_ACT|OPR4_CK|OPR4_CKML|OPR4_CKPF|OPR4_KKA|OPR4_KKP|OPR4_KKS|OPR4_KKS1|OPR4_PPCOPPOthers: OPR5|OPR1|OPR3|OPR6|OPR7|OPR8|OPR9|OPRCMFE|MSW1|MSW23 3应用举例应用举例. .物料价格维护问题Case 1如何在物料价格未
19、维护时依旧可估算成本.比如在CK11N(CK40N)计算成品标准成本时,其中有一些Component没维护价格.就可使用OPR4_CK将默认的错误消息Switch Off掉(从Tcode OKKN-Misc.-Error Management按钮也可).*另外临时处理方法一是将相关一是将相关componentcomponent的物料的物料CostCost 1View1View选上选上DoDo notnot CostingCosting.对需要计算标准成本的材料选上它就不再允许计算标准成本,不妥,但是对原材料无所谓,因为系统会这样处理,如此材料没维护价格,BOM用到它的成品不计算其成本,但是如此
20、物料维护了价格后,还是以物料价格为先的.(当然CK11N去估算此原材料是不行的,用户也不需如此做).二是按二是按SAPSAP推荐的如果将推荐的如果将priceprice设成设成0.01,price0.01,price unitunit设置成设置成100100.Case 2如何限定物料价格必须维护.(1)对采用S price control的.SAP默认是Warning(Tcode :OMT4 M3-132,如需要限定必须维护价格,将其改成W就可.(2)对采用V price control的,OMT4找不到其消息号M3-131,但系统默认是Warning,如果用户认为也有相关配置就有犯了认为SA
21、P万能的错误,再次强调SAP只是一堆代码并不神秘.好让我们看看其逻辑.*实际上直接使用SE16:T160M可直接配置MM相关.如图:1SE38找到程序LMG11F01 2在此处设置断点 3如价格为0(空格) 写死的,当然配置无效. 9 / 16再看S Price control(如下图,显然从T160M表读了IMG数据).4 4灵活运用消息灵活运用消息. .对于消息的运用,除了可配置消息类别外,另外一个重要用处就在于,可根据消息找到程序弹出消息的确切行,然后稍微花点时间看看程序逻辑就可大概知道异常发生的根本原因. 从某种程度来讲,即使对某模块很陌生,只要掌握得好,依旧可排除一些问题.5 5 配
22、置自定义的消息配置自定义的消息. .俩方法可模妨SAP的消息配置1 从上我们已经知道既然 T160M 是可直接使用 SE16 维护的,我们就可直接将相关设置写入T160M.然后就可根据相关设置取得消息类别(如上图我们使用函数 ME_CHECK_T160M),这样比类似MESSAGE E017(ZFIMSG)Hard code 要安全得多,假设不管三七二十一就给出错误消息,除非在程序中确信已考虑了所有情况,否则还是在 T160M 这样设置比较好(万一在生产环境还可更改 E 成 W 什么的). 10 / 162我们知道T100C是所谓的可配置消息表,我们可使用SE16:T100C和V_T100C.
23、(1)SE16:T100S定义消息可配置信息.如图1在此新建.(进去browse数据似乎不可新建)设置消息.如下图.1Appl Area消息类ZFIMSG. 2表示允许配置的消息类型 3没选则表示不能关闭消息.(2)SE16:V_T100C配置消息.如图:1表示直接使用程序(Tcode)的消息类型2当当程序以BDC方式运行时的消息类型3就是上图设置的允许的消息类型,可看到警告和关闭都没出现(T100CT100C没允许没允许) 11 / 16同样在程序中避免使用泪水MESSAGE E017(ZFIMSG)而采用CALL FUNCTION READ_CUSTOMIZED_MESSAGE EXPOR
24、TING I_ARBGB = ZFIMSG I_DTYPE = I_MSGNR = 017 IMPORTING E_MSGTY = SY-MSGTY.根据返回的SY-MSGTY去判断消息类型将更好些.6 6实例介绍实例介绍PO在有发票校验后禁止修改价格,假设无PO release策略,使用User-exit步骤如下:(1)找合适的用户出口找合适的用户出口发现EXIT_SAPMM06E_017比较合适,SMOD 输入enhancement name :MM06E005(2)(2)编写代码编写代码. .*&-*& Include ZXM06U42 *&-*DATA : ZW
25、ATEKPO like BEKPO , ZIEINFO LIKE EINFO OCCURS 0 WITH HEADER LINE, ZERMSG(73) TYPE C.TABLES EKBE .*TEKPO records all the old PO item date .* I_EKPO records currently processed PO item .READ TABLE TEKPO INTO ZWATEKPO WITH KEY EBELP = I_EKPO-EBELP .*只对ME22N才生效.CHECK SY-TCODE = ME22N .*EKBE是PO history 表
26、,如有Q,R表示有发票校验历史,不允许更改价#SELECT SINGLE * FROM EKBE WHERE EBELN = I_EKPO-EBELn AND EBELP = I_EKPO-EBELP 12 / 16 AND ( BEWTP = Q OR BEWTP = R).CHECK SY-SUBRC = 0 .*如果SY-SUBRC =0表示发票已经校验,不允许更改价格,否则还是可更改价格#IF I_EKPO-NETPR ZWATEKPO-NETPR .* Change e017(ZFIMSG) accordingly* MESSAGE e017(ZFIMSG).使用下面函数代替. CA
27、LL FUNCTION READ_CUSTOMIZED_MESSAGE EXPORTING I_ARBGB = ZFIMSG I_DTYPE = I_MSGNR = 017 IMPORTING E_MSGTY = SY-MSGTY. CHECK SY-MSGTYNE - .REFRESH ZIEINFO. ZIEINFO-MSGID = ZFIMSG. ZIEINFO-MSGNO = 017 . ZIEINFO-MSGV1 = VAR1. ZIEINFO-MSGV2 = VAR2. APPEND ZIEINFO .CALL FUNCTION MESSAGE_GET_TEXT EXPORTING
28、 IEINFO = ZIEINFO ILANGU = SY-LANGU IMPORTING ETEXT = ZERMSG . MESSAGE ZERMSG TYPE SY-MSGTY .ENDIF.*在大多数情况下追踪消息能发现问题所在,然而在一些特定情况下在大多数情况下追踪消息能发现问题所在,然而在一些特定情况下,SAP,SAP显示的消息似乎和实际业务并显示的消息似乎和实际业务并不符合不符合. .好比一个人咳嗽的厉害好比一个人咳嗽的厉害, ,以为是感冒结果其实不过是有写异物进入其喉咙而已以为是感冒结果其实不过是有写异物进入其喉咙而已. .14.14.使用用户授权使用用户授权 13 / 161
29、5.15.调用外部程序和程序动态生产调用外部程序和程序动态生产16.16.选择屏幕选择屏幕17.17.使用程序运行变式使用程序运行变式18.18.制作制作 TcodeTcode二二. .加强篇加强篇. .1.CATT1.CATT 14 / 162.BDC2.BDC3.3.制作程序的制作程序的 backgroundbackground jobjob4.SapScript4.SapScript5.Smartform5.Smartform6.SAP6.SAP QueryQuery7.ALV7.ALV 编程编程8.ALE/iDoc8.ALE/iDoc9.Report9.Report painterpa
30、inter 和和 DrilldownDrilldown ReportReport10.RFC/BAPI10.RFC/BAPI11.11.编写用户增强编写用户增强12.12.深入深入 ABAPABAP 工作台工作台在这章将深入介绍各种 ABAP 对象的操作.13.13.传输请求传输请求这节并不是侧重介绍如何配置传输请求和其运行机制的,这通常是 basis 的工作和ABAPer 并无关系,还是那句话,了解点大概是必要的. 15 / 16通常企业起码会有两个系统,开发(测试)系统和生产系统(有些企业开发任务相对少,开发和测试使用同一台 server 甚至同一 client,开发和测试也都有 ABAPer 完成),如果要严格开发流程,开发,测试必须是分开的(为了节省当然可使用同一 server,不同的 Client 甚至用不同 System Number 逻辑分成两 Server),在此不深入讨论.熟悉几个名词:1 1 开发类开发类(Development(Development Class).Class).开发类可简单理解为逻辑上相关的一组 ABAP 对象,在将来传输时将使用同一传输层.实际上开发类本身也可看做是一个 ABAP 对象,可使用 SE80 建立.$TMP 是本地开发类,属于此开发类的任何 ABAP 对象(包括自定义的表,编写的程序等都只能在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 办公楼装修施工标准流程
- 电信运营商投诉处理流程指南
- 汽车维修厂安全操作规程汇编
- 物流仓库智能化改造计划
- 津17SZ-1 天津市市政基础设施工程施工图设计审查要点 道路篇
- 2025年湖南省岳阳市汩罗市事业单位安置定向招聘退役军士考试18人招聘笔试备考题库及答案详解(有一套)
- 临床医师资格实践考试官方指南
- 指示代词用法练习题及解析讲解
- 六年级作文教学方案:美好生活主题
- 六年级读书500字
- 基于遗传算法的带时间窗的车辆路径问题研究
- DB34-T 4986-2025 建设项目临时用地规模核定指南
- 2025年消防宣传月知识竞赛考试题库50题(含答案)
- 2025-2030中国光伏产业全球化布局及政策红利分析报告
- 幼儿园评估整改措施汇编
- 小学保密教育班会
- 痛风性关节炎护理诊断及护理措施
- 小学生社团活动课件
- 乙肝防治知识讲座课件
- 人教版(2024)七年级上册英语教学计划(含教学进度表)
- 售后服务回访跟踪措施
评论
0/150
提交评论