sap ABAP开发入门到进阶.doc_第1页
sap ABAP开发入门到进阶.doc_第2页
sap ABAP开发入门到进阶.doc_第3页
sap ABAP开发入门到进阶.doc_第4页
sap ABAP开发入门到进阶.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SAP ABAPBAP 开发入门到进阶开发入门到进阶 基础篇 以简短的篇幅介绍最基本的语法 增强篇 介绍了常用的 ABAP 技术 希望此书对想从事 ABAP 开发的读者有相当帮助 一一 基础篇基础篇 如果读者已经有一定 ABAP 经验 可不看此篇 在此篇中 花了很少篇幅回顾 ABAP 编程的基本常识 读者如有其他开发工具的知识 花很少时间就可理解这些常 识 1 1 什么是什么是 ABAPABAP 了解一下 ABAP 的发展历史是必要的 ABAP 产生的最初的目的是用以生成简 单打印报表程序 我们知道 SAP 最初是为解决财务实时数据处理问题的 ABAP Advanced Business Application Programming 高级业务应用编程语言 现在用 于编写 SAP AG 的几乎全部产品源代码 严格地讲 ABAP 4 不仅仅是一个开发工具 而且是一套完整的 client server 开发 环境 这很好理解 微软的 Visiual Studio 是一开发环境 VB VC 等是开发工具 ABAP 开发环境包含支持程序开发的一些函数和包等 如图 1 1 是 SAP 开发环境的一个三层架构的例图 三层 多层 的概念也不新鲜 比如在安装 SAP 时也可将 DB instance 安在一台 server Central instance 在另一台所 谓的 Application server 我想这应是相关 SAP 基础系统包括各种应用程序所在 而通 常客户端安装的 SAP Logon Front End SAP 会话管理器等是所谓的表示层 它通过 TCP IP SAP 演示协议或 RFC 和应用服务器进行数据传输 用户看到的只是处理后的 数据返回 和 Delphi 的三层逻辑相近 在应用层包含多个组件象 ABAP 开发平台 身份验证 系统管理维护等用以处理会话 更新 排队 网关 数据层处理 native 和 Open SQL 等 这是从内部机制方面看 SAP 各模块应用的业务逻辑都在应用层被处理 从用户角 度 然后结果被返回 图 1 2 是 SAP Logon 的一个截图 1 表示应用服务器 通常企业为了节省成本和方便 管理可能会将应用服务器和数据库安装在同一起 2 System number 举个实例 开发 和测试服务共用一台服务器 开发使用 system number00 而测试使用 system number 01 通过 system number 逻辑地将一台 physical server 逻辑地分成了两台 application server 学习 ABAP 并不难 有人说 SAP 系统重在管理思想 不在技术 通常对有编程经 验的读者不用任何培训参考一些相关资料就可立即上手 简单介绍下 ABAP 4 的一些特征 1 和 SAP 紧密结合 尤其在开发报表方面 坦率地讲 除了和 SAP 集成的好处 我定 认为 ABAP 在报表开发上比 Crystal report Tool 要高效简单 2 和 VB 一样 ABAP 是解释形的 如读者精通 VB 学习 ABAP 应该豪不费力 倒是 既然 SAP 是企业管理解决方案 ABAPer 必须对企业管理流程熟悉 解释性的另一好处是可以很好跟踪程序逻辑 使用 H 这对了解业务逻辑的实和 追踪错误很有效 和 VB 不同的是 VB 跟踪时允许程序运行指针随意往回或往 全拉而 ABAP 程序去不行 但是 ABAP 程序允许在运行时修改变量的值 这是 编译程序不能做到的 当然通常编译比解释执行的速度会更快 ABAP 程序执行并不直接读取源代码 而是执行内部经过 生成 的描述 对于 ABAP 4 字典的修改激活后将触发内部描述的重新生成 如程序并没激活就执行 原版本 或者出现错误 程序没激活可能造成 ABAP Dumping ABAP 3 在对数据库处理方面 除了可直接执行 SQL 使用 native sql 缺点是错误处理很难 控制 相当于有开发环境将 SQL 语句直接传给 DB 去执行 SAP 在 ABAP 开发环 境层还提供了一套 Open SQL 访问底层数据库 4 程序员都知道 Windows 平台下开发都支持事件驱动 Windows 系统本身也支持 事件驱动 ABAP 也提供了事件驱动 这表现在 Dialog 编程方面 但是 ABAP 在此 方面并不强 而且相对讲也比较难于掌握 在后面会讨论 5 基于面向对象的风靡 ABAP 在此方面也有相当反应 在 SAP 强大的软件包中提 供了大量可重复使用的程序 读者也可定义类并使用它快速建立新的对象 6 类似 Java ABAP 开发的程序能运行于任何操作系统 Java 有 Java 虚拟机 ABAP 也有 ABAP processor 多种数据库 比如在 ABAP 字典中实现了透明表对各种底 层数据库表的映射 这样在 ABAP 层看到的透明表就和具体数据库无关 各种网 络系统 图 1 3 是一个 ABAP 开发和运行环境的图例 1 使用 C C 建立 ABAP 开发工具 数亿行 ABAP source code 组成 SAP AG 多个产 品 姑且不论国内 ERP 产品设计在解决企业流程上的局限性 在大多数国外的 ERP 产 品中我们都可看到结合自身 ERP 自带的开发工具 在技术上这也是落后人家 所以建 议国内 ERP 界能少谈点象什么 不上 ERP 等死 上 ERP 找死 百分之百的企业上 ERP 都失败 诸如的空洞口号 实际上我并不知道他们是凭什么得出这样的结论的 多干点实际的事情 2 既然 ABAP 是解释型的 运行速度会有影响吗 我想多少会有的 为了解决这个问题 除了要加大相关服务器内存外 相对日新月异的硬件技术这已非主要瓶颈 SAP 本身在提高性能也提供了相当的 ABAP 技术 比如使用 Cluster table Pooled table 和 Logical database 在接下来会有详细介绍 2 ABAP2 ABAP 开发环境的建立开发环境的建立 一个 ABAP 顾问和我讨论说 大学毕业我做 ABAP 开发不久做了顾问 薪资相当 可观 最要好同学在 unix 平台下写 Cobar 组件 薪资却并不理想 从技术角度 我认为使用 C 写组件肯定比 ABAP 开发难度要高 用其人话说他 是坐的庙好 是的 SAP 行业特别是早些年是个被异化的行业 人们可看到某些人出于 经济目的铺天盖地的对 ERP 不正确的宣传 这同样反应在 IT 各行业 拿到 XX 牌 Route 认证 拿到 XX 网络认证 拿到 XX 数据库认证 拿到 XX 管理学位年薪基本的 都在十几万以上 现在人们发现实际不是这回事 从现在 SAP 也已经开始降温了 我 想这趋势还会持续 和学习其它语言唯一不同的是 ABAP 是集成在 SAP 基础平台系统中的 为了学 习 ABAP 你必须安装一套 SAP 可选择可选择 R 3 miniSAP 或或 IDES 而通常的情况是安装光 盘渠道比较难找 只有一些大企业实施了只有一些大企业实施了 SAPSAP 才可能有才可能有 而且还必须注意版权问题而且还必须注意版权问题 其他开发其他开发 工具随便都可找到安装程序工具随便都可找到安装程序 对想学习 ABAP 的程序员这是个主要门槛 掌握基本的 ABAP 开发环境对 ABAPer 是有益的 似乎多数 ABAPer 对底层并不感 兴趣 3 3 获得获得 AccessAccess KeyKey 4 ABAP4 ABAP workbenchworkbench 和和 ABAPABAP dictionarydictionary 5 5 第一个程序第一个程序 Hello Hello World World 如何进行 ABAP 开发呢 本节使用老套的做法 介绍如何建立一个 Hello World 的 ABAP 程序 为了让读者尽快掌握 ABAP 开发熟悉 ABAP 开发环境是必须的 请看 图图 1 5 1 程序的原代码如下 ReportReport ZHELLO ZHELLO WriteWrite Hello Hello World World 按 F8 运行 运行成功在屏幕上显示 Hello World 的字样 恭喜你 第一个程序运行成功 6 ABAP6 ABAP 语法简介语法简介 数据类型 控制流程 文本摘要 输出格式 程序调试 7 Open7 Open SQLSQL 和和 NativeNative SQLSQL 8 8 内表和工作区内表和工作区 9 9 使用字段符号使用字段符号 10 10 模块化程序模块化程序 11 11 文件处理文件处理 12 12 簇数据库和逻辑数据库簇数据库和逻辑数据库 13 13 消息和错误处理消息和错误处理 尽管消息这词还用在其他地方比如 PO SO 打印传真等所谓的 output message 请看 ABAP 百夜 谈 系统出现异常 在这里消息只谈在程序运行逻辑异常处理时的消息 1 定义消息定义消息 参考图参考图 7 7 使用 Tcode SE91 可自定义包含多消息号的消息类 在图 7 7 中就定义了一个消息 类 ZFIMSG 同时消息号 017 中使用了俩 消息变量 2 运用消息运用消息 1 可在程序Title中使用MESSAGE ID加入消息类 REPORT ZMSGTEST MESSAGE ID ZFIMSG MESSAGE I017 使用消息 IMG 有这样的画面 1 2 的 appl 和 work area 实际上对应的就是程序的 message id SE91 message class 2 在程序 Title 中定义直接在语句中使用 REPORT ZMSGTEST MESSAGE I017 ZFIMSG 1 将变量赋给消息 REPORT ZMSGTEST MESSAGE I017 ZFIMSG 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 ZFIMSG 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能用到的消息都应该在此表中找到 T160M MM模块相关消息表 此表可完全直接维护 就是说只要记住它 MM的消息配置直接使 用SE16就可以 T100C FI模块中用户自定义的消息 比如使用OBA5 OFMG等自定义的消息会写入此表 CO配 置消息不在此表 T100S 此表保存着允许用户更改的应用区域和消息号 举例假设你删除了KI 005则在OBA5 中再不能配置此消息 对MM模块有些例外 M7不在此表 使用OMCQ依旧可设置 M3不 在此表 OMT4依旧可设置 此表也可直接维护 和T160M不同的是 你必须在SE16输入T100S按新建按钮 才可维护 查询时只可Display T100U 哪个用户最后更改了消息 从此表能找到 T100W For Workflow 2 2常用常用Tcode Tcode 部分部分 FI OBA5 OFMG OFPM MM OMRM OKZZ OMT4 OMCQ O04C SD OVAH CO OPR4 ACT OPR4 CK OPR4 CKML OPR4 CKPF OPR4 KKA OPR4 KKP OPR4 KKS OPR4 KKS1 OPR4 PPCOPP Others OPR5 OPR1 OPR3 OPR6 OPR7 OPR8 OPR9 OPRCMFE MSW1 MSW2 3 3应用举例应用举例 物料价格维护问题 Case 1 如何在物料价格未维护时依旧可估算成本 比如在CK11N CK40N 计算成品标准成本时 其中有一些Component没维护价格 就可使用 OPR4 CK将默认的错误消息Switch Off掉 从Tcode OKKN Misc Error Management按钮也 可 另外临时处理方法一是将相关一是将相关componentcomponent的物料的物料CostCost 1 1 ViewView选上选上DoDo notnot CostingCosting 对需要计算标准成本的材料选上它就不再允许计算标准成本 不妥 但是对原材料无所谓 因 为系统会这样处理 如此材料没维护价格 BOM用到它的成品不计算其成本 但是如此物料维 护了价格后 还是以物料价格为先的 当然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 如果用 户认为也有相关配置就有犯了认为SAP万能的错误 再次强调SAP只是一堆代码并不神秘 好让我们看看其逻辑 实际上直接使用SE16 T160M可直接配置MM相关 如图 1 SE38找到程序LMG11F01 2 在此处设置断点 3 如价格为0 空格 写死的 当然配置无效 再看S Price control 如下图 显然从T160M表读了IMG数据 4 4灵活运用消息灵活运用消息 对于消息的运用 除了可配置消息类别外 另外一个重要用处就在于 可根据消息找到程序弹 出消息的确切行 然后稍微花点时间看看程序逻辑就可大概知道异常发生的根本原因 从某 种程度来讲 即使对某模块很陌生 只要掌握得好 依旧可排除一些问题 5 5 配置自定义的消息配置自定义的消息 俩方法可模妨SAP的消息配置 1 从上我们已经知道既然 T160M 是可直接使用 SE16 维护的 我们就可直接将相关设置写入 T160M 然后就可根据相关设置取得消息类别 如上图我们使用函数 ME CHECK T160M 这样 比类似MESSAGE E017 ZFIMSG Hard code 要安全得多 假设不管三七二十一就给 出错误消息 除非在程序中确信已考虑了所有情况 否则还是在 T160M 这样设置比较 好 万一在生产环境还可更改 E 成 W 什么的 2我们知道T100C是所谓的可配置消息表 我们可使用SE16 T100C和V T100C 1 SE16 T100S定义消息可配置信息 如图 1 在此新建 进去browse数据似乎不可新建 设置消息 如下图 1 Appl Area消息类ZFIMSG 2 表示允许配置的消息类型 3 没选则表示不能关闭消息 2 SE16 V T100C配置消息 如图 1 表示直接使用程序 Tcode 的消息类型 2 当当程序以BDC方式运行时的消息类型 3 就是上图设置的允许的消息类型 可看到警告和关闭都没出现 T100CT100C没允许没允许 同样在程序中避免使用泪水MESSAGE E017 ZFIMSG 而采用 CALL FUNCTION READ CUSTOMIZED MESSAGE EXPORTING 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 ZWATEKPO 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 表 如有Q R表示有发票校验历史 不允许更改价 SELECT SINGLE FROM EKBE WHERE EBELN I EKPO EBELn AND EBELP I EKPO EBELP 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 使用下面函数代替 CALL FUNCTION READ CUSTOMIZED MESSAGE EXPORTING I ARBGB ZFIMSG I DTYPE I MSGNR 017 IMPORTING E MSGTY SY MSGTY CHECK SY MSGTY NE REFRESH ZIEINFO ZIEINFO MSGID ZFIMSG ZIEINFO MSGNO 017 ZIEINFO MSGV1 VAR1 ZIEINFO MSGV2 VAR2 APPEND ZIEINFO CALL FUNCTION MESSAGE GET TEXT EXPORTING IEINFO ZIEINFO ILANGU SY LANGU IMPORTING ETEXT ZERMSG MESSAGE ZERMSG TYPE SY MSGTY ENDIF 在大多数情况下追踪消息能发现问题所在 然而在一些特定情况下在大多数情况下追踪消息能发现问题所在 然而在一些特定情况下 SAP SAP显示的消息似乎和实际业务并显示的消息似乎和实际业务并 不符合不符合 好比一个人咳嗽的厉害好比一个人咳嗽的厉害 以为是感冒结果其实不过是有写异物进入其喉咙而已以为是感冒结果其实不过是有写异物进入其喉咙而已 14 14 使用用户授权使用用户授权 15 15 调用外部程序和程序动态生产调用外部程序和程序动态生产 16 16 选择屏幕选择屏幕 17 17 使用程序运行变式使用程序运行变式 18 18 制作制作 TcodeTcode 二二 加强篇加强篇 1 CATT1 CATT 2 BDC2 BDC 3 3 制作程序的制作程序的 backgroundbackground jobjob 4 SapScript4 SapScript 5 Smartform5 Smartform 6 SAP6 SAP QueryQuery 7 ALV7 ALV 编程编程 8 ALE iDoc8 ALE iDoc 9 Report9 Report painterpainter 和和 DrilldownDrilldown ReportReport 10 RFC BAPI10 RFC BAPI 11 11 编写用户增强编写用户增强 12 12 深入深入 ABAPABAP 工作台工作台 在这章将深入介绍各种 ABAP 对象的操作 13 13 传输请求传输请求 这节并不是侧重介绍如何配置传输请求和其运行机制的 这通常是 basis 的工作和 ABAPer 并无关系 还是那句话 了解点大概是必要的 通常企业起码会有两个系统 开发 测试 系统和生产系统 有些企业开发任务相对少 开发和测试使用同一台 server 甚至同一 client 开发和测试也都有 ABAPer 完成 如 果要严格开发流程 开发 测试必须是分开的 为了节省当然可使用同一 server 不同的 Client 甚至用不同 System Number 逻辑分成两 Server 在此不深入讨论 熟悉几个名词 1 开发类开发类 Development Class 开发类可简单理解为逻辑上相关的一组 ABAP 对象 在将来传输时将使用同一 传输层 实际上开发类本身也可看做是一个 ABAP 对象 可使用 SE80 建立 TMP 是本地开发类 属于此开发类的任何 ABAP 对象 包括自定义的表 编写的程序 等都只能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论