sap ABAP开发入门到进阶
SAPABAP语言编程手册
SAPABAP语⾔编程⼿册第⼀章程序调试编译任何程序最基本的技能就是对程序的调试(debugging). 所以让我们先熟悉⼀下SAP ABAP程序的调试⼿段。
如何调试ABAP程序?在这本书中,我假设你使⽤的是ABAP编辑器(事务代码 SE38)开发ABAP程序。
但是,如果你使⽤的是Object Navigator (事务代码 SE80)做开发⼯作,过程也是相同的。
在ABAP编辑器屏幕,采取以下步骤设置你的调试断点:1. 选择你要开始调试的代码⾏。
2. 按“Session断点“钮。
如果要删除断点,只要双电击程序⾏上的Session断点图标(icone)即可删除断点。
提⽰:如果你的SAP版本较⽼,点击断点图标后,会有⼀个画⾯弹出,让你选择是“Session断点“还是”External断点“。
如果你要管理程序⾥设置的所有断点,你可以去菜单:实⽤程序(Utilities)> 断点。
如何调试Web应⽤程序?如果你需要调试⼀个Web应⽤程序,设置断点的步骤和你设置ABAP程序断点完全相同,只是你设置的不是Session断点,⽽是外部断点(External Breakpoint)。
假设你在ABAP编辑器⾥编辑Web应⽤程序,请按照下⾯的步骤设置断点:1.在Web应⽤程序⾥,选择你想要调试的代码⾏。
2.点击“External断点”按钮。
3.如果要删除断点,只要双电击程序⾏上的External断点图标(icone)即可删除断点提⽰:在较⽼版本上,点击断点图标后,会有⼀个画⾯弹出,让你选择是“Session断点“还是”External断点“。
你也可以去菜单:“实⽤程序(Utilities)> External 断点“,去管理所有External断点。
如何在程序⾥⼿动设置断点?你可以在你的程序⾥设置断点语句,让程序在运⾏时只会为预先设定的⽤户停在断点。
这样,其他⽤户可以⾃⾃如地运⾏程序,⽽你可以⾃由地调试程序。
SAP开发 ABAP介绍
一,什么是ABAP:定义:ABAP=Advanced business application programSAP最初开发ABAP/4语言仅为内部使用,为应用程序员提供优化的工作环境。
经过不断的改进和修改以满足商业领域的需要。
现在, ABAP/4 已成为SAP开发所有自己的应用程序的仅有工具。
ABAP/4 是第四代支持结构化程序设计的语言。
它合并了所有通常的控制结构和模块化概念。
同时,它还支持面向对象的程序设计方法,这就为ABAP的应用开发开拓了更广阔的空间。
而且,它还可以实现和其他编程语言的合成,如VB,JAVA,C/C++等。
二, ABAP的一些特性:1. ABAP包括:2. ABAP/4 支持商业数据类型和操作。
您可以用特殊日期和时间字段进行计算。
系统会自动执行必需的类型转换。
3. ABAP/4 包含一个叫 Open SQL 的SQL子集。
用 Open SQL,您可以读取和访问数据库表,与所用的数据库系统无关4. ABAP/4 允许您定义和调用子程序。
也可以调用其他程序的子程序。
参数能够以各种方式从子程序传递或传递到子程序。
5. ABAP/4 包含一种特殊子程序,叫做功能模块。
您可以在中央库中创建和维护功能模块。
在调用程序和子程序之间功能模块有一个明确定义的数据接口。
它们能够以调用程序的独立模式进行分别测试。
6. ABAP/4 报表程序用于分析数据库表中的数据。
这种分析的结果可以显示在屏幕上或发送到打印机上。
逻辑数据库支持报表程序。
7. ABAP/4将对话程序组织为包含对话模块的模块池。
每个动态程序(由一个屏幕及其流逻辑组成的“动态程序”)都基于一个ABAP/4 对话程序。
流逻辑包含对 ABAP/4对话模块的调用。
三,和ABAP相关联的SAP BASIS结构:SAP R/3系统是一个典型的三层架构系统,包括:表现层(Presentation Layer):这是SAP用户和R/3系统交流的接口,用户在这一层对SAP系统进行操作。
SAP ABAP开发培训
THANKS
感谢观看
加密传输和存储
对敏感数据进行加密传输和存 储,保护数据安全。
经典性能优化案例分享
数据库查询优化
通过优化SQL语句和索引设计,提高查询效 率。
并发控制优化
通过合理的并发控制机制,提高系统并发处 理能力。
代码重构
对冗余、低效的代码进行重构,提高程序执 行效率。
系统资源调优
根据系统资源使用情况,调整配置参数,提 高资源利用率。
案例实现过程
需求分析、设计、编码、测试等步骤。
案例总结与拓展
对案例进行总结,提出改进意见和拓展思路。
04
CATALOGUE
界面设计与用户体验优化
界面元素及布局规划
界面元素
包括文本框、按钮、下拉菜单、表格等常用界面元素,以及它们在 SAP ABAP开发中的实现方法。
布局规划
讲解如何合理规划界面布局,包括界面元素的排列、分组、对齐等 ,以提供清晰、易用的用户界面。
视觉设计
介绍如何运用色彩、字 体、图标等视觉元素, 提升界面的美观度和易 用性。
经典界面设计案例分享
案例介绍
分享一些经典的SAP ABAP界面设计案例,包括它们的设计思路 、实现方法和用户体验优化措施。
案例分析
对案例进行深入分析,探讨其优点和不足,以及可以改进的地方。
案例实践
提供一些实践机会,让学员亲手实现一些经典的界面设计案例,加 深对所学知识的理解和应用。
03
如何在ABAP开发中使用设计模式提高代码质量和可重用性。
调试技巧与问题排查方法
1 2
调试工具介绍
SAP提供的ABAP调试工具及其使用方法。
断点与日志
设置断点、查看变量值、输出日志等调试手段。
ABAP入门知识最全总结新人小白必备学习资料
SAP系统与ABAP关系
01
SAP系统是一款广泛应用于企业 资源计划(ERP)、供应链管理 (SCM)、客户关系管理 (CRM)等领域的软件产品。
02
ABAP是SAP系统的开发语言, 用于编写SAP系统中的业务逻辑、 数据处理和报表生成等功能。
调试日志
在调试过程中,可以开启调试日 志功能,记录程序执行过程中的 详细信息和操作步骤。这对于复 杂问题的排查和分析非常有帮助。
08
实战案例分析与经验分 享
案例一:简单报表开发实例
报表需求分析与设计
明确报表目的、数据源和输出格式,设计报 表布局和字段。
ABAP报表开发流程
创建报表程序,定义数据源和选择条件,编 写报表逻辑和输出处理。
根据实际需求设置报表的输出格式, 如PDF、Excel、Word等。
格式调整
调整报表的页面设置、边距、字体、 颜色等,确保报表输出的美观和易读 性。
报表性能优化策略
数据源优化
优化数据库查询语句,减少数据冗余和提高查询 效率。
报表缓存
合理利用报表缓存机制,减少重复计算和数据库 访问次数。
分页处理
对于大量数据的报表,采用分页处理技术,提高 报表加载速度和用户体验。
Eclipse与SAP系统连接
配置Eclipse连接参数,连接到SAP系统,实现ABAP代码的上传、下载和执行等操作。
其他辅助工具推荐
SAP Notepad
一款轻量级的文本编辑器,支持ABAP语法高亮显示和代 码折叠等功能,适合编写简单的ABAP程序。
ABAP Doc
SAP培训-ABAP入门(六)【朗泽SAP培训】
可使用在 Drill-Down 报表的撰写方式中。
5.1 事务状态屏幕当用户使用 SAP R/3 来输入数据时,SAP R/3 使用事务来控制工作的执行,每个事务都会包含一些不同的屏幕,每个屏幕被定义为一个程序名称及一个屏幕号,在执行SAP R/3 时选择菜单“System”中的“Status”可看到如下的界面:如图:事务码是 SE38,程序名称是 SAPLWBABAP,屏幕号是 1005.2 BDC表BDC表结构BDC表是一个结构,用来存放要放入输入界面的数据,包含有以下的字段:Field Name Type DescriptionProgram Char(8) Program name of TransactionDynpro Char(4) Screen number of TransactionDynbegin Char(1) Indicator for new ScreenFnam Char(35) Name of Database Field from ScreenFval Char(80) Value to Submit to Field可在程序开始之初声明一个内表使用 BDCDATA 的结构:DATA BEGIN OF INT_BDC OCCURS 0.INCLUDE STRUCTURE BDCDATA.DATA END OF INT_BDC.如在以上的界面中要输入 VBAK-KUNNR 及 VBAK-NAME1 两个字段的内容,分别要填入'34051920' 及'台达电子',其 BDC表内容如下:Program Dynpro Dynbegin Fnam FvalSAPMV45A 0300 XVBAK-KUNNR 34051920VBAK-NAME1 台达电子BDC_OKCODE /nnBDC_OKCODE 字段的值就是结束输入时所要按下的键盘句柄.常用的BDC Okcode(OK码)OKCODE 声明/nn 功能键nn,Fnn/00 回车/8 F8,继续或执行/11 F11,Post提交%EX 退出BACK F3,返回上一屏DLT 删除PICK 双击SAVE F11,保存存入BDC表的资料首先我们需建立两个子程序,BDC_SCREEN 是来存入Program,Dynpro 和 Dynbegin 三个字段,也就是输入界面的程序名称及屏幕号,BDC_FIELD 用来存入 Fnam 及 Fval 两个字段,也就是输入界面所需填入的各个字段内容,程序内容如:* Add BDC Screen Field DataFORM BDC_SCREEN TABLES P_BDC STRUCTURE BDCDATAUSING P_PROGRAM P_SCREEN.CLEAR P_BDC.P_BDC-PROGRAM = P_PROGRAM.P_BDC-DYNPRO = P_SCREEN.P_BDC-DYNBEGIN = 'X'.APPEND P_BDC.ENDFORM.* Add BDC Field DataFORM BDC_FIELD TABLES P_BDC STRUCTURE BDCDATAUSING P_NAME P_VALUE.CLEAR P_BDC.CASE P_VALUE.WHEN ''.WHEN OTHERS.P_BDC-FNAM = P_NAME.P_BDC-FVAL = P_VALUE.APPEND P_BDC.ENDCASE.ENDFORM.接下来在程序中去调用这两个子程序来填入数据,程序如下:PERFORM BDC_SCREEN TABLES INT_BDC:USING 'SAPMV45A' '0300'.PERFORM BDC_FIELD TABLES INT_BDC:USING 'VBAK-KUNNR' '34051920',USING 'VBAK-NAME1' '台达电子',USING 'BDC_OKCODE' '/00'. " 保存并结束5.3 Call Transaction 命令将数据依序填入 BDC 表后要写入 R/3 的数据库时要使用 CALL TRANSACTION 命令,命令格式如下:CALL TRANSACTION WITH <tcode> USING <BDC Table> MODE <Display Mode><Display Mode> 可分成:A Show all ScreenE Show only Screen with ErrorN Show no Screen如:CALL TRANSACTION 'VA03'USING INT_BDCMODE 'E'.5.4 BDC程序示例例如我们想经由 BDC 程序将 Sales Empolyee 的数据由 ASCII文本文件去更新 R/3 数据库 Sales Empolyee 的 Persolnal Data,会有以下两个界面要输入:Program Name 是 SAPMP50A,Screen Number 1000,Transaction Code 是 PAL3 Program Name 是 SAPMP50A,Screen Number 2042,Transaction Code 是 PAL3在Screen 1000 要填入的资料是说明字段名值PersonalRP50G-PERNR 242147NumberDataInfoType RP50G-CHOIL Personal在Screen 2042 要填入的资料是说明字段名值01/13/1969Date P002-BEGDAFrom12/31/9999P002-ENDDADateToDoraName P002-NACHNLastChengFirstName P002-VORNA欲转入的ASCII文本文件名是 empoly.txt,其格式为说明长度位置值Number10 1 242147 PersonalInfo Type 20 11 Personal Data Date 10 31 01/13/1969From10 41 12/31/9999ToDateLast Name 20 61 DoraName 20 81 ChengFirst程序如下:* 程序头说明PROGRAM SOURCE HEADER* Program Name: ZTBDC00* Description: Change Sales Empolyee Data Using BDC Program* Date/Author: 1998/06/10 周庆日* Table Update:* Special Logic:* Include:*---------------------------------------------------------------* 变更日志MODIFICATION LOG*---------------------------------------------------------------* ChangeDate Programmer Request Description* ===================================* 1998/06/10 Chou NEW PROGRAM*----------------------------------------------------------------------------* 报表名REPORT NAME*------------------------------------------------------------------REPORT ZTBDC00NO STANDARD PAGE HEADINGMESSAGE-ID ZZLINE-COUNT 60LINE-SIZE 80.* 定义数据表和变量DATA*----------------------------------------------------------------TABLES: RP50G,P002.DATA: BEGIN OF INT_BDC OCCURS 0.INCLUDE STRUCTURE BDCDATA.DATA: END OF INT_BDC.* Work Internal TableDATA: BEGIN OF IN_REC,PERNR LIKE RP50G-PERNR,CHOIL LIKE RP50G-CHOIL,BEGDA LIKE P002-BEGDA,ENDDA LIKE P002-ENDDA,NACHN LIKE P002-NACHN,VORNA LIKE P002-VORNA,END OF IN_REC.DATA: P_FILE(30) VALUE 'empoly.txt'. "ASCII文本文件名* 初始化INITIALIZATION*---------------------------------------------------------------- INITIALIZATION.* AT START SELECTION*---------------------------------------------------------------START-OF-SELECTION.PERFORM READ_DATA.PERFORM PROCESS_DATA.* END OF SELECTION*---------------------------------------------------------------------END-OF-SELECTION.PERFORM CLEAN_UP.* FORM*-------------------------------------------------------------* 打开ASCII文本文件读数据Read Data OPEN ASCII Text File *-------------------------------------------------------------FORM READ_DATA.OPEN DATASET P_FILE FOR INPUT IN TEXT MODE.IF SY-SUBRC NE 0.MESSAGE E999 WITH '无法打开 ' P_FILE.ENDIF.ENDFORM.* 处理数据Process Data*-------------------------------------------------------------FORM PROCESS_DATA.DO.READ DATASET P_FILE INTO IN_REC. "把数据添加到内表IF SY-SUBRC NE 0.EXIT.ENDIF.PERFORM BUILD_BDC. "添加到BDC表PERFORM SUBMIT_BDC. "调用事务码修改数据ENDDO.ENDFORM.*----------------------------------------------------* 把数据添加到BDC表Add Data to BDC TableFORM BUILD_BDC.PERFORM BDC_SCREEN TABLES INT_BDCUSING 'SAPMP50A' '1000'.PERFORM BDC_FIELD TABLES INT_BDC:USING 'RP50G-PERNR' IN_REC-PERNR,USING 'RP50G-CHOIL' IN_REC-CHOIL,USING 'BDC_OKCODE' '/00'.PERFORM BDC_SCREEN TABLES INT_BDCUSING 'SAPMP50A' '2042'.PERFORM BDC_FIELD TABLES INT_BDC:USING 'P0002-BEGDA' IN_REC-BEGDA,USING 'P0002-ENDDA' IN_REC-ENDDA,USING 'P0002-NACHN' IN_REC-NACHN,USING 'P0002-VORNA' IN_REC-VORNA,USING 'BDC_OKCODE' '/11'.ENDFORM.*----------------------------------------------------------------* 调用事务码执行数据变更Call Transaction Code to Execute Change DataFORM SUBMIT_BDC.CALL TRANSACTION 'PAL3' USING INT_BDCMODE 'N'.REFRESH INT_BDC. "将BDC Table 资料清除ENDFORM.*------------------------------------------------------------------* 关闭ASCII文本文件FORM CLEAN_UP.CLOSE DATASET P_NAME.IF SY-SUBRC NE 0.MESSAGE E999 WITH '无法关闭 ' P_FILE.ENDIF.ENDFORM.*------------------------------------------------------------------* 增加BDC屏幕字段数据Add BDC Screen Field Data*------------------------------------------------------------------FORM BDC_SCREEN TABLES P_BDC STRUCTURE BDCDATAUSING P_PROGRAM P_SCREEN.CLEAR P_BDC.P_BDC-PROGRAM = P_PROGRAM.P_BDC-DYNPRO = P_SCREEN.P_BDC-DYNBEGIN = 'X'.APPEND P_BDC.ENDFORM.* Add BDC Field Data*-----------------------------------------------------------------------------FORM BDC_FIELD TABLES P_BDC STRUCTURE BDCDATAUSING P_NAME P_VALUE.CLEAR P_BDC.CASE P_VALUE.WHEN ''.WHEN OTHERS.P_BDC-FNAM = P_NAME.P_BDC-FVAL = P_VALUE.APPEND P_BDC.ENDCASE.ENDFORM.6. OLE自动化OLE(Object Linking and Embendding)是由 Microsoft 所制定的标准,可以让一个程序经由此去整合另一程序的对象(Object),OLE Automation 是其中的一部分,经由既定的语法格式去产生连结的对象数据,可以分成Objects of Application、Call its Methods和Set and Get Object Properties。
(2024年)ABAP培训教程
修改表
使用ALTER TABLE语句修 改已存在的数据库表结构, 如添加、删除或修改字段。
删除表
使用DROP TABLE语句删 除指定的数据库表。
15
数据库查询优化
索引优化
根据查询条件和数据量大小,合 理创建和使用索引,提高查询效
率。
2024/3/26
SQL语句优化
编写高效的SQL查询语句,避免全 表扫描和不必要的JOIN操作。
在ABAP中,使用 `INHERITING FROM`关键字 实现继承,通过方法重写实现 多态。
21
封装与接口
封装(Encapsulation)将数据 和行为捆绑在一起,隐藏内部实 现细节,只暴露必要的接口。
2024/3/26
接口(Interface)定义了一组方 法的规范,但不提供具体实现。 实现接口的类必须提供这些方法
01
设计报表的布局,包括表格、图表、文本等元素的排列和组合。
格式化
02
对报表中的数据进行格式化处理,如日期、数字、货币等格式
的显示。
样式设置
03
设置报表的样式,包括字体、颜色、背景等,以提高报表的可
读性和美观度。
26
报表输出与打印
2024/3/26
输出格式
支持多种输出格式,如PDF、Excel、Word等,以满足不同用户 的需求。
用于ABAP程序的开发、调试和执行,提 供了丰富的开发工具和界面设计功能。
SAP Web IDE
基于Web的集成开发环境,支持ABAP和 其他SAP开发语言,提供了代码编辑、版 本控制、团队协作等功能。
Eclipse ADT
基于Eclipse平台的ABAP开发工具,提供 了代码自动补全、语法检查、调试等功能。
SAPABAP入门教程参考手册
WebDynpro报表开发方法
01
02
03
04
05
WebDynpro概 述
WebDynpro使 用…
WebDynpro开 发…
WebDynpro高 级…
WebDynpro优 化…
了解WebDynpro的基本概 念、架构和组件。
掌握WebDynpro适用的业 务场景和报表类型。
学习WebDynpro报表的开 发流程,包括创建 WebDynpro组件、定义数 据源、设计界面、实现业务 逻辑等。
文件定位与指针
可以使用文件指针在文件中进行定位和操作。ABAP 提供 了 SEEK 和 TELL 等语句用于文件指针的定位和获取当前 位置。
03
SAPABAP开发环境搭建
安装与配置SAP GUI
下载与安装SAP GUI
01
从SAP官方网站下载最新。
配置连接参数
Web应用开发
SAPABAP支持Web应用开发,可以 通过Web Dynpro等技术实现Web 应用的开发和部署。
02
SAPABAP基础知识
数据类型与变量
03
数据类型
变量声明
变量赋值
SAP ABAP 中有多种数据类型,包括基本 数据类型(如 C、N、D、T 等)、结构数 据类型和引用数据类型等。
后台任务调度
使用SAP系统的任务调度功能,可以定时启动或周期性执行后台任务。可以根据业务需求设置任务的执行频率和时间窗口。
错误处理和日志记录 在批处理程序中添加错误处理和日志记录逻辑,以便在任务执行过程中出现问题时能够及时发现并进行 排查。可以将错误信息记录到日志文件中,方便后续分析和处理。
07
调试与性能优化技巧
2024年SAPABAP实用培训教程
SAPABAP实用培训教程引言SAP(系统应用与产品)是一家德国公司,提供企业资源规划(ERP)软件,以帮助企业管理和整合业务运营。
ABAP(高级业务应用程序编程)是SAP的编程语言,用于开发SAP应用程序。
本教程旨在为初学者和希望提高ABAP编程技能的开发人员提供实用的培训。
第一部分:ABAP基础1.1ABAP概览ABAP是一种高级编程语言,专门用于SAP应用程序的开发。
它具有结构化和面向对象的特点,支持模块化、可重用性和可维护性。
ABAP编程环境包括ABAP工作台,它是开发SAP应用程序的主要工具。
1.2数据定义在ABAP中,数据定义是通过数据字典实现的。
数据字典是用于定义和描述数据元素、结构和表格的地方。
数据元素是基本的数据单位,结构是由多个数据元素组成的复合数据类型,表格是用于存储大量数据的集合。
1.3ABAP程序结构ABAP程序由多个块组成,包括声明、执行和异常处理块。
声明块用于定义变量和常量,执行块用于编写程序的主要逻辑,异常处理块用于处理程序运行时可能出现的错误。
第二部分:ABAP编程实践2.1报表开发报表是ABAP编程中最常见的应用程序之一。
通过编写SELECT 语句,可以从SAP数据库中检索数据,并通过报表显示格式化输出。
报表开发涉及定义选择屏幕、处理用户输入、执行数据库查询和显示结果。
2.2输入输出处理输入输出处理是ABAP编程中的重要部分。
输入屏幕用于收集用户输入,输出屏幕用于显示程序的结果。
通过使用屏幕元素,如字段符号、表格控制和循环结构,可以创建用户友好的界面。
2.3数据处理数据处理是ABAP编程中的核心任务。
通过使用内部表、工作区和数据库表,可以对数据进行读取、写入和修改。
ABAP提供了丰富的数据处理语句,如MODIFY、APPEND和DELETE,以及用于数据转换和验证的内建函数。
第三部分:ABAP高级特性3.1面向对象编程ABAP支持面向对象编程(OOP)的概念。
SAP_ABAP_工作流开发流程
工作流开发流程2012年02月14日修改记录目录1文档结构 (1)1.1SAP工作流术语 (1)2BUSINESS OBJECT的创建 (1)2.1什么是B USINESS O BJECT (1)2.2B USINESS O BJECT的组成 (1)2.3创建B USINESS O BJECT的步骤 (2)2.3.1TCode:SWO1,输入BO的名字,点击创建 (2)2.3.2输入BO的属性,其中Application为S (2)2.3.3创建BO的Key,光标放到Key fields上,点击Create,选择NO. (2)2.3.4光标放在Methods上,点击创建,选择NO (3)2.3.5光标放到Events上,点击Create,先创建一个触发工作流的Event (4)2.3.6在Interfaces中,添加一个接口IFAPPROVE (5)2.3.7修改新建的Method,Event状态 (5)2.3.8Business Object已经创建完毕,整体截图 (6)3工作流模板的开发 (6)3.1工作流模板的创建 (6)3.2CE新开发工作流步骤介绍(WS99900049为例) (7)3.2.1排除工作流触发者(类型:Container Operation) (7)3.2.2检查Department字段(类型:Condition) (7)3.2.3Wait for release object to be changed (类型:Fork) (8)3.2.4逻辑删除工作流(类型: Wait) (8)3.2.5check if steps = 0 (类型:Loop) (9)3.2.6根据TransType来执行Rule(类型:Multiple Condition) (9)3.2.7审批任务(类型:Activity) (9)3.2.8同意- 排除当前用户(类型:Container Operation) (10)3.2.9同意- 审批通过Steps减1(类型:Container Operation) (11)3.2.10同意- Current_Step加1(类型:Container Operation) (11)3.2.11同意- 是否是最后的审批(类型:Condition) (12)3.2.12同意- 判断拒绝原因是否为空(类型:Condition) (12)3.2.13同意- 拒绝原因为空–发送成功邮件(类型:Send Mail) (12)3.2.14同意- 拒绝原因不为空–发送审批失败邮件(类型:Send Mail) (13)3.2.15拒绝- 审批被拒绝Steps赋值为0(类型:Container Operation) (13)3.2.16拒绝- 发送审批被拒绝邮件(类型:Send Mail) (13)4审批屏幕的接口定义及调用 (14)4.1接口定义 (14)4.2调用方式 (14)5触发工作FUNCTION MODULE编写 (16)5.1接口的定义 (16)5.2查询E VENT触发需要的参数 (16)5.2.1查询录入合同的详细信息 (16)5.2.2查询录入人的姓名及交易类型 (16)5.2.3查询录入人的所在机构号 (17)5.2.4拼接BO的KEY (17)5.3给E VENT C ONTAINER里面的变量赋值 (17)5.4调用触发工作流的FM (18)文档结构SAP工作流术语SAP 工作流术语简写描述Workflow Template WF SAP工作流模板是用基于SAP平台的工作流而开发出来运行于SAP 系统中的业务工作流,用户可以自定义各种类型的工作流模板。
SAP的ABAP编程入门
1. ABAP/4 IntroductionIntroductionABAP/4(Advanced Business Application Programming)是SAP/R3目前唯一的系统发展工具, 属 4GL, 语法比较近似Visual Basic或JAVA, 和传统third-generation 语言, 如C,PASCAL 有很大不同, 在程序模块(Program Structure Module)可分以下三个部分:1.Sequential coding within processing block与一般语言语法近似, 如IF,WHILE等, 但并没有GOTO叙述2.Reports呼叫一个独立的事件(Depending Event), 读取database 产生数据列表3.Dialog屏幕参数输入的对话框, 专门处理database 读取或异动的tranaction processBasic Languange Overview1.data element 宣告方式, 如数值, 字符数据变量宣告2.操作数(operate)使用, 如+ - * /3.Control element使用, 如Boolean 值4.特殊数据格式, 如日期与时间5.字符串字料处理function, 如部分字符串的截取6.子程序或自定函数的呼叫7.SQL语法使用8.数据结构的使用, 如process internal table的宣告与使用Reports Overview1.Reports Task, 如报表屏幕预览或打印机打印的选择2.Reports 模块是一个Stand-along 程序,3.database读取方式, 如可定义logical database(与磁盘的physical storage对映)4.报表数据的计算与产生5.报表的输出Dialog Overview1.专处理database 的读取与异动, 如使用SQL 指令2.Dialog 不是一个Stand-Along Progarm, 使用transaction code来产生屏幕对话框3.由flow logic 控制, flow logic分成PBO(Process Before Output)与PAI(Process After Input)2.Begin To Programming2.1 ABAP/4 EditorCreating ABAP/4 Program使用ABAP Workbench撰写程序(Choose Tools->ABAP/4 Workbench, Transaction Code: S001), 萤幕如下:可分成:1.ABAP/4 Editor :针对简单的报表或程序, 仅使用几个组件或不使用2.Obiect Browser :针对复杂的报表或程序, 如Dialog Transaction Module 撰写使用ABAP/4 Editor 撰写程序1.ABAP/4 Editor 画面如下(Transaction Code:SE38):2.输入程序名称, 如果是新程序, 按下”Create”, 如果修改已存在程序, 则按下”Change”或F6键在命名规则上, Reports程序为 Yaxxxxxx或Zaxxxxxx, a表application module简称, 如s表SD Dialog程序为SAPMYxxx或SAPMZxxx3.输入程序Attribute(1).Title:程序描述或功能说明(2).Type:Execute mode: 1: Stand-along Program 如ReportsI: Include ProgramM: Module PoolF: Function GroupS: Subroutine Pool(3).Status:Program development status: P: SAP standard production programK: Customer production programS: System programT: Test program(4).Application: 程序所属的application module, 如F表 Financeial acounting(5).Development class: 用于同一系统中各个program, 如果不属任一class, 可使用$TMP4.撰写Source CodeProgram 之后接的是程序名称, Write 是显示的意思, 会将所接的字符串在屏幕上显示, 注意每一行最后要有一个 . (点), 表示叙述的结束, 储存后回ABAP/4 Editor画面5. 执行程序按”Execute”或F8键, 屏幕可见执行所得的结果重要的编辑键key FunctionF8F5F11 CTRL+F11 执行程序复制游标所在列的内容储存档案删除游标所在列2.2 ABAP/4 Data ElementData TypeABAP/4 的数据型态可分成:Type Length Range Initial Value DescriptionC 1 1-65535Byte Space 字符串数据, 如’Program’D 8 8Byte ‘00000000’ 日期数据, 格式为YYYYMMDDF 8 8Byte 0 浮点数I 4 -2^31至2^31-1 0 整数N 1 1-65535Byte ‘00…0’ 数值所组成的字符串P 8 1-16Byte 0 Packed 数, 用在小数点数T 6 6Byte ‘000000’ 时间数据, 格式为HHMMSS X 1 1-65535Byte X’00’ 16进位数变量宣告变量宣告包含 name, type, length 和 structure四个部分, 使用 DATA 指令, 如DATA: S1 TYPE I,SUM TYPE I.常数宣告常数宣告使用 CONSTANTS 指令, 如宣告 PI 是一个小数点5位的值 3.14159, CONSTANTS PI TYPE P DECIMALS 5 VALUE ‘3.14159’.系统所定义数据这是由系统所定义的专有名辞, 如SPACE 空白字符串SY-SUBRC 系统执行传回值, 0 表示成功SY-UNAME logon 账号SY-DATUM 系统日期SY-UZEIT 系统时间SY-TCODE 目前的transaction codeTYPE 叙述用来指定数据型态或宣告自定数据型态Example:TYPES: BEGIN OF MYLIST,NAME(10) TYPE C,NUMBER TYPE I,END OF MYLIST.DATA LIST TYPE MYLIST.LIKE 叙述跟TYPE叙述使用格式相同, 如DATA TRANSCODE LIKE SY-TCODE.不同的是 LIKE 用在已有值的数据项, 如系统变量, 而TYPE叙述则是用在指定数据型态。
sapabap开发教程培训一pdf-2024鲜版
2024/3/27
21
界面测试与评估
功能测试
对界面各项功能进行详细测试,确保功能的稳定 性和准确性。
用户反馈收集
积极收集用户反馈意见,及时响应并改进界面设 计中的问题和不足。
ABCD
2024/3/27
兼容性测试
测试界面在不同设备和浏览器上的兼容性,确保 用户在不同环境下都能获得良好的体验。
数据分析与优化
11
数据安全与优化
01
02
03
04
数据备份与恢复
定期备份数据库,确保数据安 全;在必要时进行数据恢复操
作。
2024/3/27
数据加密
对敏感数据进行加密存储和传 输,保护数据隐私和安全。
SQL注入防范
采取有效措施防止SQL注入攻 击,如参数化查询、输入验证
等。
性能优化
对数据库性能进行监控和分析, 优化SQL语句和数据库结构,
sapabap开发教程培训一pdf
2024/3/27
1
contents
目录
• SAP ABAP开发基础 • 数据处理与数据库操作 • 程序设计与开发实践 • 界面设计与用户体验优化 • 系统集成与扩展功能实现 • 性能调优与故障排查技巧
2024/3/27
2
01 SAP ABAP开发基础
2024/3/27
2024/3/27
数据类型包括基本数据类型 (如整数、浮点数、字符等) 和复杂数据类型(如结构、表 等)。
ABAP还支持用户自定义数据 类型,以满足特定业务需求。
6
Байду номын сангаас
变量、常量与运算符
变量用于存储程序执行过程中的 临时数据,可以根据需要定义不
从实例学SAP ABAP编程(1-19章)代码(1-5章)
插入内表行:DATA: BEGIN OF man,name(20) TYPE c,high TYPE p DECIMALS 2,weight TYPE p DECIMALS 2,END OF man.DATA: man1 LIKE TABLE OF man.man-name = '张参'.man-high = '1.68'.man-weight = 120.INSERT man INTO TABLE man1.man-name = '刘志'.man-high = '1.78'.man-weight = 160.INSERT man INTO TABLE man1.LOOP AT man1 INTO man.WRITE: / man-name,man-high,man-weight. ENDLOOP.ULINE.man-name = '钱华'.man-high = '2.22'.man-weight = 220.INSERT man INTO man1 INDEX 3.LOOP AT man1 INTO man.WRITE: / man-name,man-high,man-weight. ENDLOOP.读放文件DATA: BEGIN OF man,name(20) TYPE c,high TYPE p DECIMALS 2,weight TYPE p DECIMALS 2,END OF man.DATA: man1 LIKE TABLE OF man.* name = 'c:\temp\testa.txt'.* typa = 'dat'.CALL FUNCTION 'UPLOAD'EXPORTINGcodepage = 'test'filename = 'c:\temp\testa.txt'filetype = 'dat'item = '读放文件'TABLESdata_tab = man1EXCEPTIONSinvalid_filesize = 1invalid_table_width = 2invalid_type = 3no_batch = 4unknown_error = 5gui_refuse_filetransfer = 6OTHERS = 7.IF sy-subrc <> 0.* message id sy-msgid type sy-msgty number sy-msgno* with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.LOOP AT man1 INTO man.WRITE: / man-name,man-high,man-weight.ENDLOOP.格式化输出DATA wa LIKE spfli.WRITE:/.WRITE:10'航班承运人',40'航班连接',60'国家代码',80'起飞城市',100'起飞机场'.SELECT * INTO wa FROM spfli.WRITE:/ wa-carrid UNDER '航班承运人',wa-connid UNDER '航班连接',wa-countryfr UNDER '国家代码',wa-cityfrom UNDER '起飞城市',wa-airpfrom UNDER '起飞机场'.ENDSELECT.内表排序DATA: BEGIN OF man,name(20) TYPE c,high TYPE p DECIMALS 2,weight TYPE p DECIMALS 2,END OF man.DATA: man1 LIKE hashed TABLE OF man with unique key name.man-name = '张参'.man-high = '1.68'.man-weight = 120.INSERT man INTO TABLE man1.man-name = '刘志'.man-high = '1.78'.man-weight = 160.INSERT man INTO TABLE man1.man-name = '钱华'.man-high = '2.22'.man-weight = 220.INSERT man INTO table man1.LOOP AT man1 INTO man.WRITE: / man-name,man-high,man-weight. ENDLOOP.ULINE.sort man1 ascending by weight descending .skip.uline.LOOP AT man1 INTO man.WRITE: / man-name,man-high,man-weight. ENDLOOP.内部数据存有文档DATA: BEGIN OF man,name(20) TYPE c,high TYPE p DECIMALS 2,weight TYPE p DECIMALS 2,END OF man.DATA: man1 LIKE TABLE OF man.DATA: name TYPE rlgrap-filename, typa TYPE rlgrap-filetype.man-name = '张参'.man-high = '1.68'.man-weight = 120.INSERT man INTO TABLE man1.man-name = '刘志'.man-high = '1.78'.man-weight = 160.INSERT man INTO TABLE man1.man-name = '钱华'.man-high = '2.22'.man-weight = 220.INSERT man INTO man1 INDEX 2.name = 'c:\temp\testa.txt'.typa = 'dat'.CALL FUNCTION 'download'EXPORTINGcodepage = 'testa'filename = namefiletype = typaitem = '文件测试' TABLESdata_tab = man1 EXCEPTIONSinvalid_filesize = 1invalid_table_width = 2invalid_type = 3no_batch = 4unknown_error = 5gui_refuse_filetransfer=6OTHERS = 7.IFsy-subrc<>0.* message id sy-msgid type sy-msgty number sy-msgno * with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.消息REPORT yth_helloworld.DATA: msg1(20) TYPE c VALUE '测试'.DATA: msg2(20) TYPE c VALUE 'ABAP'. DATA: msg3(20) TYPE c VALUE '消息!'.MESSAGE i006(ymess) WITH msg1 msg2 msg3.data:BEGIN OF man,name(30) TYPE c,high TYPE p DECIMALS 2,weight TYPE p DECIMALS 2,END OF man.FIELD-SYMBOLS <fsa> LIKE man.DATA man1 LIKE man.man-name = '雨荷'.man-high = '1.78'.man-weight = 140.ASSIGN man TO <fsa>.WRITE:/ <fsa>-name,man-high,<fsa>-weight.DATA: msg1(20) TYPE c VALUE '测试'.DATA: msg2(20) TYPE c VALUE 'ABAP'. DATA: msg3(20) TYPE c VALUE '消息!'.MESSAGE i001(00) WITH msg1 msg2 msg3.DATA: c1(2) TYPE c,c2(2) TYPE c,c3(2) TYPE c,c4(2) TYPE c,c5(20) TYPE c VALUE '91* 12*23*344445',c9(2) TYPE c.c9 = '* '.WRITE: / .WRITE c5.SPLIT c5 AT c9 INTO c1 c2 c3 c4 .WRITE: / c1,c2,c3,c4.DATA: msg1(20) TYPE c VALUE '测试'.DATA: msg2(20) TYPE c VALUE 'ABAP'.DATA: msg3(20) TYPE c VALUE '消息!'. MESSAGE i001(00) WITH msg1 msg2 msg3.DATA: BEGIN OF man,name(20) TYPE c,high TYPE p DECIMALS 2,weight TYPE p DECIMALS 2,END OF man.DATA: man1 LIKE TABLE OF man WITH HEADER LINE, man2 LIKE TABLE OF man.man-name = '张参'.man-high = '1.68'.man-weight = 120.APPEND man TO man1.man-name = '刘志'.man-high = '1.78'.man-weight = 160.APPEND man TO man1.MOVE man1[] TO man2.WRITE: / man-name,man-high,man-weight.LOOP AT man1.write: / man1-name,man1-high,man1-weight. ENDLOOP.直接读取文件DATA: BEGIN OF man,name(20) TYPE c,high TYPE p DECIMALS 2,weight TYPE p DECIMALS 2,END OF man.DATA: man1 LIKE TABLE OF man.CALL FUNCTION 'WS_UPLOAD'EXPORTINGcodepage = 'test'filename = 'c:\temp\testa.txt'filetype = 'dat'TABLESdata_tab = man1 EXCEPTIONSinvalid_filesize = 1invalid_table_width = 2invalid_type = 3no_batch = 4unknown_error = 5gui_refuse_filetransfer = 6OTHERS = 7.IF sy-subrc <> 0.* message id sy-msgid type sy-msgty number sy-msgno * with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.LOOP AT man1 INTO man.WRITE: / man-name,man-high,man-weight. ENDLOOP.字符串替换DATA: str1(10) TYPE c VALUE 'AABBCCDDEE'.WRITE / '接着的字符串______________将被替换.'. WRITE AT 14(10) str1.读取数据表*定义工作区DATA a_spfli TYPE spfli.*定义内表,请注意有Header lineDATA ta_spfli TYPE TABLE OF spfli WITH HEADER LINE. *分隔线ULINE.WRITE / '使用工作区'.ULINE.* 将数据表逐行转移至工作区,只读前5行SELECT * INTO CORRESPONDING FIELDS OFa_spfli FROM spfli UP TO 5 ROWS.WRITE: / a_spfli-connid,a_spfli-carrid,a_spfli-cityfrom,a_spfli-cityto.ENDSELECT.ULINE.WRITE / '使用内表'.ULINE.SELECT * INTO CORRESPONDING FIELDS OFTABLE ta_spfli FROM spfli UP TO 5 ROWS.*从数据表读数据至内表,直接从内表输出*如果TA_SPFLI没有定义Header line,会出错LOOP AT ta_spfli.WRITE: / a_spfli-connid,a_spfli-carrid,a_spfli-cityfrom,a_spfli-cityto.ENDLOOP.ULINE.WRITE / '将内表数据转移至工作区'.ULINE.LOOP AT ta_spfli INTO a_spfli.WRITE: / a_spfli-connid,a_spfli-carrid,a_spfli-cityfrom,a_spfli-cityto.ENDLOOP.内连接和外连接*定义结构DATA: BEGIN OF arcd,carrid TYPE spfli-carrid,connid TYPE spfli-connid,fldate TYPE sflight-fldate,END OF arcd.*工作区DATA arcd1 LIKE arcd.*关联数据表,读取前10条记录,写入工作区,并输出SELECT spfli~carrid spfli~connid sflight~fldate INTO arcd1 FROM spfli INNER JOIN sflight ON spfli~carrid = sflight~carridAND spfli~connid = sflight~connid UP TO 10 ROWS. WRITE: / arcd1-carrid,arcd1-connid,arcd1-fldate. ENDSELECT.使用package size 读取数据*定义内表,请注意有Header lineDATA wa_spfli TYPE TABLE OF spfli WITH HEADER LINE.*分隔线ULINE.* 以每次读取5条记录,直到读取所有数据SELECT * INTO TABLE wa_spfli FROM spfli PACKAGE SIZE 5.*输出内表记录LOOP AT wa_spfli.WRITE: / wa_spfli-connid,wa_spfli-carrid,wa_spfli-cityfrom,wa_spfli-cityto.ENDLOOP.*输出5条记录后输出一条横线ULINE.ENDSELECT.交互式列表START-OF-SELECTION.WRITE:'初如列表,sy-lsind = ' ,sy-lsind.AT LINE-SELECTION.IF sy-lsind = 1.WRITE: '第二列表,sy-lsind =',sy-lsind.ENDIF.列表颜色*数据库表spfli相关TABLES spfli.SKIP.*输出表头,背景灰蓝FORMAT COLOR COL_HEADING.ULINE AT /(91).WRITE: / sy-vline,(15) '航线承运人', sy-vline , (15) '航班连接', sy-vline,(15) '国家代码', sy-vline,(15) '起飞城市', sy-vline,(15) '起飞机场',sy-vline.ULINE AT /(91).FORMAT COLOR OFF.*输出内容,输出关键值为‘LH’为红色SELECT * FROM spfli.IF spfli-carrid = 'LH'.FORMAT COLOR COL_NEGATIVE.ELSE.FORMAT COLOR OFF.ENDIF.WRITE: / sy-vline,(15) spfli-carrid,sy-vline,(15) spfli-connid,sy-vline,(15) spfli-countryto, sy-vline,(15) spfli-cityfrom,sy-vline,(15)spfli-airpfrom,sy-vline.ULINE AT /(91).ENDSELECT.输出热点start-of-selection.write '请按'.format hotspot on color 5 inverse on.write '热点'.format hotspot off color off.at line-selection.write 'welcome!'.为列表定义工具条和菜单START-OF-SELECTION.* 设置已使用的状态条SET PF-STATUS 'STA1'.WRITE:'测试工具条按钮'.AT USER-COMMAND.*当单击按钮时输出CASE sy-ucomm.WHEN 'OWNSEL'.WRITE: '已选择!'.ENDCASE.在弹出式窗口中显示列表START-OF-SELECTION.* 设置已使用的状态条SET PF-STATUS 'STA1'.WRITE:'测试工具条按钮'.AT USER-COMMAND.*当单击按钮时输出CASE sy-ucomm.WHEN 'OWNSEL'.IF sy-lsind = 1.SET PF-STATUS 'STA6'.*定义子窗口并输出WINDOW STARTING AT 10 10 ENDING AT 30 20.WRITE '在子窗口输出!'.WRITE: '请注意!'.ENDIF.ENDCASE.隐藏字段技术*数据库表spfli相关TABLES: spfli, sflight.START-OF-SELECTION.SKIP.*输出ULINE AT /(91).WRITE: / sy-vline,(15) '航线承运人', sy-vline , (15) '航班连接', sy-vline,(15) '国家代码', sy-vline,(15) '起飞城市', sy-vline,(15) '起飞机场',sy-vline.ULINE AT /(91).*输出SELECT * FROM spfli.WRITE: / sy-vline,(15) spfli-carrid,sy-vline,(15) spfli-connid,sy-vline,(15) spfli-countryto,sy-vline,(15) spfli-cityfrom,sy-vline,(15) spfli-airpfrom, sy-vline.* 隐藏关键字HIDE: spfli-carrid,spfli-connid.ULINE AT /(91).ENDSELECT.AT LINE-SELECTION.*只输出第一页IF sy-lsind = 1.*根据隐藏字段读取并打印从表SELECT * FROM sflightWHERE carrid = spfli-carrid AND connid = spfli-connid.WRITE: / sflight-carrid,sy-vline,sflight-connid,sy-vline,sflight-fldate,sy-vline,sflight-price.ENDSELECT.ENDIF.使用hide技术从列表读取行*数据库表spfli相关TABLES: spfli.DATA: sela(1) TYPE c,num1 TYPE i.START-OF-SELECTION.SKIP.*输出ULINE AT /(95).WRITE: / sy-vline,'',sy-vline,(15) '航线承运人', sy-vline , (15)'航班连接', sy-vline,(15) '国家代码', sy-vline,(15)'起飞城市', sy-vline,(15) '起飞机场',sy-vline.ULINE AT /(95).*输出SELECT * FROM spfli.WRITE: / sy-vline,sela AS CHECKBOX,sy-vline,(15) spfli-carrid,sy-vline,(15) spfli-connid,sy-vline,(15) spfli-countryto,sy-vline,(15) spfli-cityfrom,sy-vline,(15) spfli-airpfrom,sy-vline.* 隐藏关键字HIDE: spfli-carrid,spfli-connid,spfli-countryto,spfli-cityfrom,spfli-airpfrom.ULINE AT /(95).* 隐藏选择框,使表格行不会选择HIDE sela.ENDSELECT.END-OF-SELECTION.num1 = sy-lsind - 1.AT LINE-SELECTION.*只输出第一页IF sy-lsind = 1.DO num1 TIMES.* 读取行READ LINE sy-index FIELD VALUE sela.* 如果checked,输出隐含字段IF sela = 'X'.WRITE: / spfli-carrid,spfli-connid,spfli-countryto,spfli-cityfrom,spfli-airpfrom.ENDIF.ENDDO.ENDIF.DATA:c1(2) TYPE c,c2(2) TYPE c,c3(2) TYPE c,c5(20) TYPE c,c9(2) TYPE c.c1 = 'AB'.c2 = 'CD'.c3 = 'EF'.c4 = 'GH'.c9 = '+'.CONCATENATE c1 c2 c3 c4 INTO c5.WRITE c5.CONCATENATE c1 c2 c3 c4 INTO c5 SEPARATED BY c9. WRITE / c5.WRITE / text-001.WRITE / text-002.WRITE / text-003.WRITE /.ULINE.DATA: BEGIN OF line,num TYPE i,sqr TYPE i,END OF line,itab LIKE STANDARD TABLEOF line WITH KEY table_line.DO 5 TIMES.line-num = sy-linno.line-sqr = sy-index ** 2.APPEND line TO itab.ENDDO.LOOP AT itab INTO line.WRITE: / line-num, line-sqr.ENDLOOP.CLEAR itab.DATA: c1(2) TYPE c,c2(2) TYPE c,c3(2) TYPE c,c4(2) TYPE c,c5(20) TYPE c VALUE '11 * 22 * 33 * 44',c9 = '* '.WRITE: / .WRITE c5.SPLIT c5 AT c9 INTO c1 c2 c3 c4 .WRITE: / c1,c2,c3,c4.DATA:BEGIN OF man,name(30) TYPE c,high TYPE p DECIMALS 2,weight TYPE p DECIMALS 2,END OF man.FIELD-SYMBOLS <fsa> LIKE man.DATA man1 LIKE man.man-name = '田雨荷'.man-high = '1.78'.man-weight = 140.ASSIGN man TO <fsa>.WRITE:/ <fsa>-name,man-high,<fsa>-weight.DATA: BEGIN OF man,name(20) TYPE c,high TYPE p DECIMALS 2,weight TYPE p DECIMALS 2,END OF man.YTH_HELLOWORLDDATA: man1 LIKE TABLE OF man WITH HEADER LINE, man2 LIKE TABLE OF man.man-name = '张参'.man-high = '1.68'.man-weight = 120.APPEND man TO man1.man-name = '刘志'.man-high = '1.78'.man-weight = 160.APPEND man TO man1.MOVE man1[] TO man2.LOOP AT man2 INTO man.WRITE: / man-name,man-high,man-weight. ENDLOOP.LOOP AT man1.write: / man1-name,man1-high,man1-weight. ENDLOOP.DATA: text1(10) TYPE c VALUE 'Basic list',text2(10) TYPE c VALUE 'Secondary List'.* Processing Block 1 : Event Block - START-OF-SELECTION START-OF-SELECTION.DO 5 TIMES.PERFORM output_line USING sy-index. ENDDO.* Processing Block 2 : Event Block - AT LINE-SELECTION AT LINE-SELECTION.WRITE: text2, sy-lsind.* Processing Block 3 : Procedure - Subroutine output_line FORM output_line USING p_index.WRITE: / text1,p_index.ENDFORM. "output_line。
sapABAP开发入门到进阶
SAP-A BAP开发入门到进阶基础篇-以简短的篇幅介绍最基本的语法增强篇-介绍了常用的ABAP技术希望此书对想从事ABAF开发的读者有相当帮助一.基础篇1. 什么是ABAP了解一下ABAP的发展历史是必要的,ABAP产生的最初的目的是用以生成简单打印报表程序,我们知道SAP最初是为解决财务实时数据处理问题的,ABAP(Adva need Bus in ess Application Programmi ng-> 高级业务应用编程语言)现在用于编写SAP AG的几乎全部产品源代码.严格地讲,ABAP/4不仅仅是一个开发工具,而且是一套完整的client/server 开发环境,这很好理解,微软的Visiual Studio 是一开发环境,VB,VC++等是开发工具.ABAP开发环境包含支持程序开发的一些函数和包等.如图1-1,是SAP开发环境的一个三层架构的例图,三层(多层)的概念也不新鲜比如在安装SAP时也可将DB instanee 安在一台server, Central instanee 在另一台所谓的Applieation server(我想这应是相关SAP基础系统包括各种应用程序所在),而通常客户端安装的SAP Logon Front End,SAP会话管理器等是所谓的表示层,它通过TCP/IP,SAP演示协议或RFC和应用服务器进行数据传输,用户看到的只是处理后的数据返回.和Delphi的三层逻辑相近,在应用层包含多个组件象ABAF开发平台,身份验证,系统管理维护等用以处理会话,更新,排队,网关,数据层处理native和Open SQL等(这是从内部机制方面看),SAP各模块应用的业务逻辑都在应用层被处理(从用户角度)然后结果被返回.Sl-l图1-2是SAP Logon的一个截图:1]表示应用服务器(通常企业为了节省成本和方便管理可能会将应用服务器和数据库安装在同一起),[2]System number,举个实例,开发和测试服务共用一台服务器,开发使用system numberOO,而测试使用system number 01,通过system number 逻辑地将一台physical server 逻辑地分成了两台applicati on server.学习ABAP并不难,有人说SAP系统重在管理思想,不在技术,通常对有编程经验的读者不用任何培训参考一些相关资料就可立即上手•简单介绍下ABAP/4的一些特征:1. 和SAP紧密结合,尤其在开发报表方面,坦率地讲,除了和SAP集成的好处,.我定认为ABAP在报表开发上比Crystal report Tool 要高效简单.2. 和VB一样,ABAP是解释形的,如读者精通VB,学习ABAF应该豪不费力,倒是既然SAP是企业管理解决方案,ABAPer必须对企业管理流程熟悉.解释性的另一好处是可以很好跟踪程序逻辑(使用/H),这对了解业务逻辑的实和追踪错误很有效.和VB不同的是,VB跟踪时允许程序运行指针随意往回或往全拉而ABAF程序去不行,但是ABAF程序允许在运行时修改变量的值,这是编译程序不能做到的•当然通常编译比解释执行的速度会更快•ABAR1序执行并不直接读取源代码,而是执行内部经过“生成”的描述,对于ABAP/4字典的修改激活后将触发内部描述的重新生成,如程序并没激活就执行原版本,或者出现错误(程序没激活可能造成ABAP Dumping ABAP).3. 在对数据库处理方面,除了可直接执行SQL使用native sql,缺点是错误处理很难控制,相当于有开发环境将SQL语句直接传给DB去执行),SAP在ABAF开发环境层还提供了一套Open SQL访问底层数据库.4. 程序员都知道Windows平台下开发都支持事件驱动,Windows系统本身也支持事件驱动,ABAP也提供了事件驱动,这表现在Dialog编程方面,但是ABAP在此方面并不强,而且相对讲也比较难于掌握(在后面会讨论).5. 基于面向对象的风靡,ABAP在此方面也有相当反应,在SAP强大的软件包中提供了大量可重复使用的程序,读者也可定义类并使用它快速建立新的对象•6. 类似Java,ABAP开发的程序能运行于任何操作系统(Java有Java虚拟机,ABAP 也有ABAP processor),多种数据库(比如在ABAP字典中实现了透明表对各种底层数据库表的映射,这样在ABAP层看到的透明表就和具体数据库无关),各种网络系统•图1-3是一个ABAP开发和运行环境的图例.ABBF开发坏境图丄—3甲岂----- 卄—2. ABAP开发环境的建立掌握基本的ABAF开发环境对ABAPer是有益的,似乎多数ABAPer对底层并不感兴趣3. 获得Access Key .4. ABAP workbench 和ABAP dictionary5. 第一个程序-Hello World.ABAP Editor; Initial Screen如何进行ABAP 开发呢?本节使用老套的做法,介绍如何建立一个”Hello World ”的 ABAP 程序,为了让读者尽快掌握 ABAP 开发熟悉ABAP 开发环境是必须的,请看图1.5-1 . 程序的原代码如下Report ZHELLO.Write ' Hello World!'.ZHELLO ①(kg^g ® Wtth V^nt Variants D CreateSUntijecU Tftie The first pro^^m Halo World fTl LICrWt«l STOSZT Last cha-oad by 06/29/2005 STfMtEF JJ _曲 CvpUy Atvtoute? Tm MStatus 8jApokaucnU I AuthB 血呵®M 汕lo$C4l 站 Jb^eSetectm screen 53TP FRCG ZHELLOM Local CbHCt 上 Lock Over we w 雷 XE9V5-1^rtriutes 3JJjJiX'. r 广日『询f o iSUtus cb>ect PS 呻6. ABAP语法简介数据类型控制流程文本摘要输出格式程序调试7.0pen SQL和Native SQL8. 内表和工作区9. 使用字段符号10. 模块化程序11. 文件处理12. 簇数据库和逻辑数据库13. 消息和错误处理尽管消息这词还用在其他地方比如PO,SO打印传真等所谓的output message(请看ABAP百夜谈),系统出现异常,在这里消息只谈在程序运行逻辑异常处理时的消息1定义消息(参考图7-7).使用Tcode SE91可自定义包含多消息号的消息类,在图7-7中就定义了一个消息类ZFIMSG同时消息号017中使用了俩&消息变量2运用消息.2. 在程序Title中定义直接在语句中使用.REPORT ZMSGTEST .MESSAGE IO17(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'EXPORTINGI_ARBGB = 'ZFIMSG'I_DTYPE =''I_MSGNR = '017'IMPORTINGE_MSGTY = SY-MSGTY.假设你做了Tcode和OBAL样可配置消息类型,在程序中你就可根据返回值SY- MSGTY 判断下步工作,E停止处理,A退出程序等.在标准程序中,接下来会PERFORM MESSAGE S来决定发送消息类型.3常用消息表格和各模块常用消息配置Tcode.在消息配置中‘Application Area和SE91的Message Class实际上是同一概念Message Control by User同样在程序中避免使用泪水 MESSAGE E017(ZFIMS 而采用CALL FUNCTION 'READ_CUSTOMIZED_MESSAGE'EXPORTINGI_ARBGB = 'ZFIMSG' I_DTYPE =''I_MSGNR = '017' IMPORTINGE_MSGTY = SY-MSGTY.根据返回的SY-MSGT 去判断消息类型将更好些. 6实例介绍P (在有发票校验后禁止修改价格 ,假设无PO release 策略,使用User-exit 步骤如下: (1) 找合适的用户出口发现 EXIT_SAPMM06E_01 比较合适,SMOD 输入 enhancement name :MM06E005 (2) 编写代码.*& ________________________________________ * *& In clude 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 curre ntly processed PO item .READ TABLE TEKPO INTO ZWATEKPO WITH KEY EBELP = I_EKPO-EBELP . ***只对ME22才生效.CHECK SY-TCODE = 'ME22N '.***EKBE 是PO history 表,如有Q,R 表示有发票校验历史,不允许更改价## SELECT SINGLE * FROM EKBE WHERE EBELN = I_EKPO-EBEL ni.Ms^fo 017Message text User Name Online Batchi Standard ESSD• E3闔囲阳A S3^— MsgT Description呂1TEKT2ErrorsNote In windowTerminationNote in fooler回 2ZFIMSG Message Class for FI Customized Programs AND EBELP = I EKPO-EBELP14. 使用用户授权15. 调用外部程序和程序动态生产16. 选择屏幕17. 使用程序运行变式18. 制作Tcode二. 加强篇.1. CATT2. BDC3. 制作程序的background job4.SapScript5.Smartform6.SAP Query7. ALV 编程8. ALE/iDoc9. Report painter 和Drilldown Report10. RFC/BAPI11. 编写用户增强12. 深入ABAP工作台在这章将深入介绍各种ABAP寸象的操作.13. 传输请求这节并不是侧重介绍如何配置传输请求和其运行机制的, 这通常是basis 的工作和ABAPe併无关系,还是那句话,了解点大概是必要的.通常企业起码会有两个系统, 开发(测试)系统和生产系统(有些企业开发任务相对少开发和测试使用同一台server甚至同一client,开发和测试也都有ABAPe完成), 如果要严格开发流程, 开发, 测试必须是分开的(为了节省当然可使用同一server, 不同的Client甚至用不同System Number逻辑分成两Server),在此不深入讨论.熟悉几个名词:1 开发类(Development Class).开发类可简单理解为逻辑上相关的一组ABAP对象,在将来传输时将使用同一传输层.实际上开发类本身也可看做是一个ABAP对象,可使用SE80建立.$TMP是本地开发类,属于此开发类的任何ABAFP寸象(包括自定义的表,编写的程序等都只能在Client 做测试用而不能被传输到其他Client.包现在被用来代退开发类.2. 包(Package)相关的ABAP对象被组合在一个包内,SE16:TADIR可看到被分配到某包的所有的ABAP对象,包决定了这些对象的传输层.所有的包被存在表TDEVC中,建立包可使用SE80或直接使用SM30:V_TDEVC.包作为开发类的退代和前身有这么几个加强特征.1. 包可嵌套使用(这点类似Java package)2. 包类可包含最多本包中可见的对象, 这些对象在包外不可见这点类似私有对象(Private object), 在00F中也很常见.3. 包可为包接口定义使用访问授权.4. 通常自定义包必须是丫或Z前坠,这点和其他ABAP对象相同(包其实也可看做ABAP对象).其他一些包前坠A-S, U-X表示SAP标准包,T私有测试包,$本地临时包,/*** 名字空间前坠.3. 传输层(Transport Layer)传输层决定包内对象是分配给本地还是可产生传输请求. 通常,开发系统都被分配了一个标准的传输层,当包被建立时,. 它就被分配了一个标准传输层. 包内对象也立即自动获得相关传输属性.相关IMG配置使用的是标准的传输层.通常由basis使用Tcode STMS配置传输管理系统维护传输曾和路由. 图2.13-1,显示的是从DVU开发的程序传输到QAS ffi PRD的传输路由,在图中程序在DVU server的client 210,100 开发后被传输到QAS Client 310测试,成功后被分别传入PRD Client 800,810 和820 .[Three System Landscape (Test) 06/13/2005 14:41:3218-> 1004. 传输请求程序是究竟保存在server 的什么地方?程序是如何在不同client 和server 之间进 行传输的?要明白这问题,首先让我们看看什么是传输程序和传输控制程序.传输控制程序TP 和R3TRAN 传输程序,R3TRANS 被用来实现SAP 各Client 间的数 据传输和不同版本迁移,TP 传输控制程序根据传输参数(Transport Profile) 调用 R3TRAN 传输程序.14. 和其它语言的交互VB,Delphi,Java 其实开发工具使用都简单,别人都弄出开发环境都给弄出了 ,学用 还会难吗?92.13-1Transport-> 210First T 日匚g 、 ->/ZQAS/欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书,学习资料等等打造全网一站式需求。
易拓sapabap培训课程2024新版
ABAP语言结合了过程化编程、面向对 象编程和事件驱动编程的特点。
ABAP运行在SAP NetWeaver应用服 务器上,与SAP数据库紧密集成。
课程目标与内容
01
02
03
课程目标
培养学员掌握SAP ABAP 开发技能,能够独立完成 SAP系统的定制和开发工 作。
课程内容
涵盖ABAP语言基础、 SAP系统架构、数据库操 作、报表开发、接口技术 、性能优化等方面。
封装
通过类,可以将数据和操作封装在一起,隐藏内部实现细节,只暴 露必要的接口给外部使用。这有助于提高代码的可维护性和可重用 性。
继承
ABAP支持类之间的继承关系,子类可以继承父类的属性和方法,并 可以添加或覆盖父类的行为。这有助于实现代码的重用和扩展。
自定义类和接口实现
自定义类
在ABAP中,可以创建自定义类来封装业务逻辑和 数据。自定义类可以包含属性、方法、事件等,以 满足特定需求。
团队协作
组建专业的项目团队,明 确各自职责和任务,确保 项目的顺利进行和高质量 完成。
项目成果展示和评估
成果展示
通过课程结业考试、项目实战演练等方式,展示学员的学 习成果和技能水平。同时,邀请企业HR和SAP技术专家对 学员进行综合评价。
评估标准
制定科学的评估标准,包括知识掌握程度、技能熟练度、 团队协作能力等多个方面,确保评估结果的客观性和公正 性。
性能优化策略探讨
SQL查询优化
优化数据库查询语句,减少数据 读取量,提高查询效率。
内存管理
合理分配和使用内存资源,避免 内存泄漏和浪费,提高系统性能 。
01 02 03 04
程序结构优化
合理安排程序结构,避免不必要 的循环和嵌套,提高程序执行效 率。
SAP ABAP开发技术详解(实例篇)
3、SAP就业前景良好,现在SAP的ABAP技术开发因奇缺而非常吃香,一般ABAP顾问年薪较高。但是SAP相关培 训价格太高,本书为读者供了一个自学的资料,也可作为培训机构的教材。
内容提要
《SAP ABAP开发技术详解(实例篇)》对SAP ABAP开发所需的常用技术(SAP报表、批量导入、对话程序、 函数)做了详尽的介绍,包括基本报表、交互式报表、复杂报表、ALV(SAP List Viewer)报表、Form(SAP Script)报表、SmartForm报表、AdobeForm报表、CALL-TRANSACTION方式批量导入、批处理SESSION方式批量 导入、一般Dynpro程序、复杂Dynpro程序、从属画面、表控制控件、函数的使用,并通过大量实例详细介绍了 ABAP开发所需技术的使用方法。
SAP ABAP开发技术详解(实 例篇)
20xx年出版的图书
01 推荐
03 目录 05 前言
目录
02 内容提要 04 作者简介
《SAP ABAP开发技术详解(实例篇)》2014年出版的图书,作者是东方先生。
推荐
ห้องสมุดไป่ตู้
1、《SAP ABAP开发技术详解(实例篇)》从自学ABAP开发出发,全面讲解相关的技术、经典案例,Step by Step。
运行环境
所有的ABAP程序都驻留在SAP数据库里。它们不像Java或者C++程序那样存储在一个单独的外部文件里,用一 般记事本编辑器就可以编辑查看源代码,而是用ABAP Workbench工具集查看和编辑源代码,由ABAP运行环境载 入和解释“编译”代码。关于选择何种环境,如果初学者条件有限,可以选择Mini SAP或者Netweaver For ABAP的7.0版本(可在SAP官方站下载),本书从Netweaver For ABAP的安装讲起。
SAP ABAP开发实战从入门到精通系列
掌握用户交互逻辑的设 计和实现方法,如数据 校验、错误处理等
01
02
03
04
学习使用ABAP事件处 理程序编写事件处理逻 辑
学习使用对话编程技术 实现复杂交互逻辑
界面性能优化与用户体验提升
了解界面性能优化的重要性 和方法
掌握提升用户体验的方法和 技巧,如减少响应时间、提 供友好提示等
学习使用ABAP性能分析工具 进行性能分析和优化
设计完善的测试用例
针对项目需求中的各项功能,设计全面、细致的测试用例,确保 测试的覆盖率和准确性。
制定明确的验收标准
与业务人员充分沟通,制定明确的验收标准和流程,确保项目成 果符合业务需求和预期目标。
项目总结与经验分享
项目成果总结
对项目成果进行全面的总结,包括项目目标达成情况、实施过程中 的经验教训以及后续改进方向等。
批处理与后台任务
实战
通过实例演示如何编写批处理程 序和后台任务,以及如何处理批 量数据和执行长时间运行的任务 。
Web Dynpro开发技术
Web Dynpro概述
简要介绍Web Dynpro的基本概念、架构和开发环境。
Web Dynpro组件开发
详细讲解Web Dynpro组件的开发过程,包括创建组件、定义界面元 素、编写事件处理程序等。
格式化处理技术
了解格式化处理的概念和需求,学习使用ABAP语言进行格式 化处理。掌握数据的格式化显示、特殊字符处理等技术。
报表性能优化与调试技巧
报表性能优化
分析影响报表性能的因素,学习优化报表性能的方法。包括优化SQL查询、减 少数据传输量、使用缓存等技术。
调试技巧
掌握ABAP语言的调试技巧,包括设置断点、单步执行、查看变量值等。学习如 何定位和解决报表开发过程中的问题。
SAPABAPJAVA开发技术总结
SAPABAPJAVA开发技术总结SAP ABAP/Java是一种企业资源计划(ERP)系统中常用的开发技术。
ABAP (Advanced Business Application Programming)是一种高级业务应用编程语言,而Java则是一种广泛使用的面向对象编程语言。
本文将总结ABAP/Java开发技术的一些重要方面。
首先,ABAP语言是用于开发和扩展SAP系统的主要语言。
ABAP是一种基于事件驱动的语言,非常适合处理和操作大量的数据。
ABAP代码可以直接集成到SAP系统中,以实现业务逻辑和功能的自定义。
ABAP开发者可以利用SAP提供的开发工具,如ABAP Workbench,来进行开发和调试。
ABAP开发者通常需要掌握SAP系统的各种模块和功能,并了解SAP系统的数据结构和运作原理。
其次,Java是一种非常通用的编程语言,也被广泛用于SAP系统的开发。
使用Java开发SAP系统可以实现与其他非SAP系统的集成和交互。
Java开发者可以使用SAP提供的Java开发工具包(SAP JCo)来访问和处理SAP系统中的数据和功能。
与ABAP不同,Java是一种跨平台的编程语言,可以在各种操作系统和开发环境中运行。
ABAP/Java开发技术的一个重要方面是ABAP和Java之间的互操作性。
可以通过SAP提供的中间件,如SAP Process Integration (PI/PO)和SAP NetWeaver Gateway,来实现ABAP和Java代码之间的通信和集成。
这种互操作性使得开发者可以将ABAP和Java的优势相结合,开发出更加灵活和强大的应用程序。
除了ABAP和Java,SAP ABAP/Java开发者还应该具备良好的数据库和SQL知识。
SAP系统通常使用关系数据库来存储和管理数据。
开发者需要熟悉常见的数据库概念和技术,如表设计、索引优化和数据访问。
熟练掌握SQL语言和数据库管理工具对于开发高效的SAP应用程序至关重要。
SAPABAP程序设计基础教程选择屏幕与列表屏幕
if spfli-connid = '0017' . REJECT.
endif.
REJECT node_name.语句:中断目前和全部旳同一级别节点旳全 部后续GET事件,执行目前层高层次(即node_name所在那一层) 旳下一种逻辑数据库GET事件,语法如下: REKECT node_name.。逻辑数据库表旳层次构造中,节点名称 node_name是目前GET事件层旳高层节点。
逻辑数据库旳流程终止
STOP语句:结束整个报表旳输出,而且触发END-OF-SELECTION事件 EXIT语句:退出全部旳GET代码块,而且不触发任何旳后续事件,直接
转向基础列表屏幕输出屏幕显示(Basic List Screen)。因 此EXIT旳功能用于退出GET事件块,其功能与STOP基本一 致,只是它不会触发后续事件。 REJECT.语句:中断目前GET事件并转向逻辑数据库同一层旳下一种
[WITH FRAME [TITLE title] ]. …… SELECTION-SCREEN END OF BLOCK < block_name>. 来创建一种选择屏幕。可选项 WITH FRAME [TITLE title] 确 定选择屏幕是否带有边框,而TITLE title选项决定是否在边框上带 有文字阐明。
定制WRITE旳符号输出-4
定制WRITE旳符号输出-5
设置列表旳格式
在ABAP中,缺省旳列表旳行宽是83个字符,缺省旳每页旳行数是6万行,能够通 过在报表申明语句旳背面添加如下子句来变化缺省旳报表旳行数和列数旳设置: REPORT <report_name> LINE-SIZE <columns>
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SAP-A BAP 开发入门到进阶基础篇 - 以简短的篇幅介绍最基本的语法增强篇 - 介绍了常用的ABAP技术希望此书对想从事ABAP开发的读者有相当帮助。
一.基础篇1.什么是ABAP ?了解一下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自带的开发工具,在技术上这也是落后人家.所以建2.ABAP开发环境的建立掌握基本的ABAP开发环境对ABAPer是有益的,似乎多数ABAPer对底层并不感兴趣,3.获得Access Key .4.ABAP workbench和ABAP dictionary5.第一个程序-Hello World.如何进行ABAP开发呢?本节使用老套的做法,介绍如何建立一个”Hello World”的ABAP程序, 为了让读者尽快掌握ABAP开发熟悉ABAP开发环境是必须的,请看图1.5-1.6.ABAP语法简介数据类型控制流程文本摘要输出格式程序调试7.Open SQL和Native SQL8.内表和工作区9.使用字段符号10.模块化程序11.文件处理12.簇数据库和逻辑数据库13.消息和错误处理尽管消息这词还用在其他地方比如PO,SO打印传真等所谓的output message(请看ABAP百夜谈),系统出现异常,在这里消息只谈在程序运行逻辑异常处理时的消息.1定义消息(参考图7-7).使用Tcode SE91可自定义包含多消息号的消息类,在图7-7中就定义了一个消息类ZFIMSG,同时消息号017 中使用了俩&消息变量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'EXPORTINGI_ARBGB = 'ZFIMSG'I_DTYPE = ''I_MSGNR = '017'IMPORTINGE_MSGTY = SY-MSGTY.假设你做了Tcode和OBA5一样可配置消息类型,在程序中你就可根据返回值SY-MSGTY判断下步工作,E停止处理,A退出程序等.在标准程序中,接下来会PERFORM MESSAGE_SEND来决定发送消息类型.3常用消息表格和各模块常用消息配置Tcode.在消息配置中,Application Area和SE91的Message Class实际上是同一概念.1消息相关最常用的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 Workflow2常用Tcode(部分):FI:OBA5|OFMG|OFPMMM: 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应用举例.物料价格维护问题[Case 1]如何在物料价格未维护时依旧可估算成本.比如在CK11N(CK40N)计算成品标准成本时,其中有一些Component没维护价格.就可使用OPR4_CK将默认的错误消息Switch Off掉(从Tcode OKKN->Misc.->Error Management按钮也可).***另外临时处理方法一是将相关component的物料Cost 1 View选上Do not Costing.对需要计算标准成本的材料选上它就不再允许计算标准成本,不妥,但是对原材料无所谓,因为系统会这样处理,如此材料没维护价格,BOM用到它的成品不计算其成本,但是如此物料维护了价格后,还是以物料价格为先的.(当然CK11N去估算此原材料是不行的,用户也不需如此做).二是按SAP推荐的如果将price设成0.01,price unit设置成100.[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灵活运用消息.对于消息的运用,除了可配置消息类别外,另外一个重要用处就在于,可根据消息找到程序弹出消息的确切行,然后稍微花点时间看看程序逻辑就可大概知道异常发生的根本原因. 从某种程度来讲,即使对某模块很陌生,只要掌握得好,依旧可排除一些问题.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]就是上图设置的允许的消息类型,可看到警告和关闭都没出现(T100C没允许)同样在程序中避免使用泪水MESSAGE E017(ZFIMSG)而采用CALL FUNCTION 'READ_CUSTOMIZED_MESSAGE'EXPORTINGI_ARBGB = 'ZFIMSG'I_DTYPE = ''I_MSGNR = '017'IMPORTINGE_MSGTY = SY-MSGTY.根据返回的SY-MSGTY去判断消息类型将更好些.6实例介绍PO在有发票校验后禁止修改价格,假设无PO release策略,使用User-exit步骤如下:(1)找合适的用户出口发现EXIT_SAPMM06E_017比较合适,SMOD 输入enhancement name :MM06E005(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 EKBEWHERE EBELN = I_EKPO-EBELnAND EBELP = I_EKPO-EBELPAND ( 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'EXPORTINGI_ARBGB = 'ZFIMSG'I_DTYPE = ''I_MSGNR = '017'IMPORTINGE_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'EXPORTINGIEINFO = ZIEINFOILANGU = SY-LANGUIMPORTINGETEXT = ZERMSG .MESSAGE ZERMSG TYPE SY-MSGTY .ENDIF.***在大多数情况下追踪消息能发现问题所在,然而在一些特定情况下,SAP显示的消息似乎和实际业务并不符合.好比一个人咳嗽的厉害,以为是感冒结果其实不过是有写异物进入其喉咙而已.14.使用用户授权15.调用外部程序和程序动态生产16.选择屏幕17.使用程序运行变式18.制作Tcode二.加强篇.1.CATT2.BDC3.制作程序的background job4.SapScript5.Smartform6.SAP Query7.ALV编程8.ALE/iDoc9.Report painter和Drilldown Report10.RFC/BAPI11.编写用户增强12.深入ABAP工作台在这章将深入介绍各种ABAP对象的操作.13.传输请求这节并不是侧重介绍如何配置传输请求和其运行机制的,这通常是basis的工作和ABAPer并无关系,还是那句话,了解点大概是必要的.通常企业起码会有两个系统,开发(测试)系统和生产系统(有些企业开发任务相对少,开发和测试使用同一台server甚至同一client,开发和测试也都有ABAPer完成),如果要严格开发流程,开发,测试必须是分开的(为了节省当然可使用同一server,不同的Client甚至用不同System Number逻辑分成两Server),在此不深入讨论.熟悉几个名词:1开发类(Development Class).开发类可简单理解为逻辑上相关的一组ABAP对象,在将来传输时将使用同一传输层.实际上开发类本身也可看做是一个ABAP对象,可使用SE80建立.$TMP是本地开发类,属于此开发类的任何ABAP对象(包括自定义的表,编写的程序等都只能在Client做测试用而不能被传输到其他Client.包现在被用来代退开发类.2.包(Package)相关的ABAP对象被组合在一个包内,SE16:TADIR可看到被分配到某包的所有的ABAP对象,包决定了这些对象的传输层.所有的包被存在表TDEVC中,建立包可使用SE80或直接使用SM30:V_TDEVC.包作为开发类的退代和前身有这么几个加强特征.1.包可嵌套使用(这点类似Java package)2.包类可包含最多本包中可见的对象,这些对象在包外不可见这点类似私有对象(Private object),在OOP中也很常见.3.包可为包接口定义使用访问授权.4.通常自定义包必须是Y或Z前坠,这点和其他ABAP对象相同(包其实也可看做ABAP对象).其他一些包前坠 A-S, U-X表示SAP标准包,T私有测试包,$本地临时包,/***名字空间前坠.3.传输层(Transport Layer)传输层决定包内对象是分配给本地还是可产生传输请求.通常,开发系统都被分配了一个标准的传输层,当包被建立时,.它就被分配了一个标准传输层.包内对象也立即自动获得相关传输属性.相关IMG配置使用的是标准的传输层.通常由basis使用Tcode STMS配置传输管理系统维护传输曾和路由.图2.13-1,显示的是从DVU开发的程序传输到QAS和PRD的传输路由,在图中程序在DVU server的client 210,100开发后被传输到QAS Client 310测试,成功后被分别传入PRD Client 800,810和820 .4.传输请求程序是究竟保存在server的什么地方?程序是如何在不同client和server之间进行传输的?要明白这问题,首先让我们看看什么是传输程序和传输控制程序.传输控制程序TP和R3TRANS传输程序,R3TRANS被用来实现SAP各Client间的数据传输和不同版本迁移,TP传输控制程序根据传输参数(Transport Profile)调用R3TRANS传输程序.14.和其它语言的交互VB,Delphi,Java其实开发工具使用都简单,别人都弄出开发环境都给弄出了,学用还会难吗?。