求助短空格键盘问题

不知道设计师怎么想的不明白為什么物理键盘。空格键那么。宽吗这就是我用全键盘打出来的效果
键盘字母我也觉得小写更适合,毕竟拼音一般不用大写字母标注
请求官方修复。可以参考谷歌输入法

在“惯用语查询”和例句查询就能用空格查单词是不能按空格的,但是有些词你省略空格打能查出来的在单词查询那里。

牛津高阶、英汉多功能词典、柯林斯词典等嘟有惯用语查询啊就是词组

或者直接用多词典查询,一次性查10多本词典的惯用语

还有目录里有搭配词典动词短语词典等这些查词组短語也不错啊。

ABAP代表高级业务应用程序编程4GL(第4玳)语言。 目前它与Java一起被定位为SAP应用服务器编程的主要语言。

让我们从SAP系统的高级架构开始 典型SAP系统的3层客户端/服务器体系结构如下所示。

表示层包含可用于控制SAP系统的任何输入设备 这可以是web浏览器,移动设备等 所有中央处理都在应用程序服务器中进行。 应用服务器本身不仅仅是一个系统而且它可以是处理系统的多个实例。 服务器与通常保存在单独服务器上的数据库层进行通信主要是出于性能原因以及安全性。 通信发生在系统的每一层之间从表示层到数据库,然后备份链

注意 - ABAP程序在应用程序服务器级别运行。 软件的技术分發与其物理位置无关 这意味着基本上所有三个级别可以在一台计算机上彼此安装,或者每个级别可以安装在不同的计算机或服务器上

ABAP程序驻留在SAP数据库中。 它们在作为SAP内核一部分的运行时系统的控制下执行 运行时系统处理所有ABAP语句,控制流逻辑和响应用户事件

因此,与C ++和Java不同ABAP程序不存储在单独的外部文件中。 在数据库内部ABAP代码以两种形式存在 -

  • 可以使用ABAP工作台工具查看和编辑的代码。

  • 生成的代碼它是一个二进制表示。 如果你熟悉Java这个生成的代码有点类似于Java字节码。

运行时系统可以被认为是一个虚拟机就像Java虚拟机一样。 ABAP运荇时系统的一个关键组件是将数据库独立语句(Open SQL)转换为底层数据库(本机SQL)理解的语句的数据库接口 SAP可以与各种各样的数据库一起工作,并且楿同的ABAP程序可以在所有这些数据库上运行

报告是熟悉一般ABAP原则和工具的良好起点。 ABAP报告用于许多领域 在本章中,我们将看到写一个简單的ABAP报告是多么容易

让我们开始使用常见的“Hello World"示例。

每个ABAP语句以ABAP关键字开头以句点结尾。 关键字必须至少由一个空格分隔 无论是否為ABAP语句使用一行或多行。

“AS ABAP"是具有自己的数据库ABAP运行时环境和ABAP开发工具(如ABAP编辑器)的应用程序服务器。 AS ABAP提供独立于硬件操作系统和数据庫的开发平台。

步骤1 - 启动事务SE38以导航到ABAP编辑器(在下一章中讨论) 让我们开始创建一个是许多ABAP对象之一的报表。

步骤2 - 在编辑器的初始屏幕上在输入字段PROGRAM中指定报告的名称。 您可以指定名称为ZHELLO1 前面的Z对于名称很重要。 Z确保您的报告驻留在客户命名空间中

客户命名空间包括所有具有前缀Y或Z的对象。当客户或合作伙伴创建对象(如报告)以将这些对象与SAP的对象区分开并防止与对象的名称冲突时始终使用它。

步骤3 - 您可以用小写字母键入报告名称但编辑器会将其更改为大写。 所以ABAP对象的名称是\'不区分大小写

步骤4 - 指定报告的名称后,单击CREATE按钮 将彈出一个弹出窗口ABAP:PROGRAM ATTRIBUTES,您将提供有关您的报告的更多信息

步骤5 - 选择“可执行程序"作为报告类型,输入标题“我的第一个ABAP报告"然后选择保存以继续。 接下来将弹出CREATE OBJECT DIRECTORY ENTRY窗口 选择按钮LOCAL OBJECT,弹出框将关闭

您可以通过输入REPORT语句下面的WRITE语句来完成第一个报表,以便完整的报表只包含以丅两行:


  

我们可以使用键盘(Ctrl + S)或保存图标(命令字段旁边的右侧)来保存报告 ABAP开发在AS ABAP中进行。

启动报告就像保存报告一样简单 单击激活按钮(开始图标旁边的左侧),然后使用图标DIRECT PROCESSING或F8功能键启动报告 还显示标题“My First ABAP Report"以及输出“Hello World"。 这里是输出 -


  

只要您不激活新报告或激活对现有报告的更妀就不会与其用户相关。 这在中央开发环境中非常重要您可以在其中开发其他开发人员在其项目中使用的对象。

如果查看字段程序并雙击值ZHELLO1ABAP编辑器将显示报告的代码。 这称为前向导航 双击对象的名称在适当的工具中打开该对象。

为了理解SAP ABAP您需要具有登录,ABAP编辑器注销等屏幕的基本知识。 本章重点介绍屏幕导航和标准工具栏功能

登录到SAP服务器后,SAP登录屏幕将提示输入用户ID和密码 您需要提供有效的用户ID和密码,然后按Enter键(用户ID和密码由系统管理员提供) 以下是登录屏幕。

以下是SAP屏幕工具栏

菜单栏 - 菜单栏是对话框窗口的顶行。

标准工具栏 - 此工具栏中提供了大多数标准功能如页首,页尾上一页,下一页和保存

标题栏 - 标题栏显示您当前所在的应用程序/业务流程嘚名称。

应用程序工具栏 - 此处提供了特定于应用程序的菜单选项

命令字段 - 我们可以启动应用程序,而无需浏览菜单事务一些逻辑代码汾配给业务流程。 在命令字段中输入事务代码以直接启动应用程序

您可以只启动事务SE38(在命令字段中输入SE38)以导航到ABAP编辑器。

退出键用于退絀程序/模块或注销 它们还用于返回到最后访问的屏幕。

以下是SAP中使用的标准退出键如图所示。

以下是检查激活和处理报告的选项。

唍成工作后从SAP系统退出ABAP编辑器或/和注销始终是一个很好的做法。

ABAP源程序由注释和ABAP语句组成 ABAP中的每个语句都以关键字开头,以句点结尾ABAP不区分大小写。

程序中的第一个非注释行以单词REPORT开头 报告将始终是创建的任何可执行程序的第一行。 该语句后面是以前创建的程序名稱 然后用一个满程终止该行。

 

这允许语句根据需要在编辑器中占用尽可能多的行 例如,REPORT可能看起来像这样 -


  

语句包括命令和任何以句点結尾的变量和选项 只要句子出现在语句的结尾,就不会出现问题 正是这个时期,标志着声明的完成

在REPORT语句下面的行,只需键入以下語句:写\'ABAP教程\'


  

撰写语句时需要考虑的四件事: -

  • 写语句将引号中的任何内容写入输出窗口。

  • ABAP编辑器将所有文本转换为大写除了由单引号包围嘚文本字符串。

  • 与一些较旧的编程语言不同ABAP不关心语句在一行上开始的位置。 您可以利用这一点并通过使用缩进指示代码块来提高程序的可读性。

  • ABAP对语句的布局没有限制 也就是说,可以在单个行上放置多个语句或者单个语句可以跨多个行扩展。

如果每个语句的开头昰相同的则连续语句可以链接在一起。 这是使用冒号(:)运算符和逗号用于终止单个语句,就像句点结束正常语句

下面是一个程序的例孓,可以保存一些关键抚摸 -


  

使用冒号表示法可以这样重写 -


  

像任何其他ABAP语句,布局没有关系 这是一个同样正确的声明 -


  

内联注释可以通过鉯下两种方法之一在程序中的任何位置声明:

  • 通过在行的第一个位置放置星号(*)来指示全行注释,在这种情况下整个行被系统认为是注释。 紸释不需要以句点终止因为它们可能不会跨越多个行延伸 -


  
  • 部分行注释通过在语句之后输入双引号(“)来表示,双引号后面的所有文本都被系统视为注释您无需在一段时间内终止部分行注释,因为它们不能跨越更多 比一条线 -


  

注意 - 注释代码未由ABAP编辑器大写

NO-ZERO命令在DATA语句之后。 咜抑制包含空格的数字字段的所有前导零 输出通常更容易让用户阅读。


  

上面的代码产生以下输出 -


  

SKIP命令有助于在页面上插入空行


  

上述消息命令产生以下输出 -


  

我们可以使用SKIP命令插入多个空白行。


  

输出将是由线数定义的几个空白行 SKIP命令还可以将光标定位在页面上所需的行上。


  

此命令用于在页面上上下动态移动光标 通常,在此命令后发出WRITE语句将输出放在所需的行上。

ULINE命令自动在输出插入一条水平线 也可鉯控制线的位置和长度。 语法很简单 -


  


  

上面的代码产生以下输出 -


  

MESSAGE命令显示由程序开始处REPORT语句中指定的消息ID定义的消息 消息ID是一个2字符代码,用于定义在使用MESSAGE命令时程序将访问的1000个消息的集合

消息编号从000到999.与每个数字相关联的消息文本最多为80个字符。 调用消息号时将显示楿应的文本。

以下是用于Message命令的字符 -

消息出现应用程序在当前点暂停。 如果程序在后台模式下运行则作业将被取消,并且消息将记录茬作业日志中
将出现该消息,用户必须按Enter键才能继续应用程序 在后台模式下,消息将记录在作业日志中
将打开一个弹出窗口,其中包含消息文本用户必须按Enter键才能继续。 在后台模式下消息将记录在作业日志中。
此消息类将取消用户当前正在使用的事务
这会在屏幕底部提供一条信息性消息。 显示的信息是正性的它只是为用户反馈。 该消息不以任何方式阻碍程序
此消息中止程序并生成ABAP短转储。

錯误消息通常用于阻止用户做不应该做的事情 警告消息通常用于提醒用户他们的行动的后果。 信息消息给用户有用的信息


  

当在ABAP中编程時,我们需要使用各种变量来存储各种信息 变量只是保留值的存储位置。 这意味着当您创建一个变量,你在内存中保留一些空间 您鈳能希望存储各种数据类型的信息,如字符整数,浮点等基于变量的数据类型,操作系统分配内存并决定在保留内存中可以存储的内嫆

ABAP为程序员提供了丰富的固定长度和可变长度数据类型。 下表列出了ABAP基本数据类型 -

一些字段和数字可以使用一个或多个名称来修改如丅所示 -

下表显示数据类型,将值存储在内存中需要多少内存以及可以存储在此类变量中的最小值和最大值。


  

在此示例中我们有一个具囿预定义长度40的C类型的字符串。STRING是可用于任何长度可变的字符串(文本字符串)的数据类型 类型STRING数据对象通常应用于固定长度不重要的字符內容。

上面的代码产生以下输出 -

 

DATE类型用于存储日期信息并且可以存储八位数字,如上所示

复杂类型分为结构类型表类型 在结构类型中基本类型和结构(即,嵌入在结构中的结构)被分组在一起 你可以只考虑基本类型的分组。 但是你必须意识到结构的嵌套的可用性

當基本类型被分组在一起时,数据项可以作为分组数据项被访问或者可以访问各个基本类型数据项(结构字段) 表类型在其他编程语言中更恏地称为数组。 数组可以是简单数组或结构数组 在ABAP中,数组被称为内部表并且与其他编程语言相比,它们可以以许多方式被声明和操莋 下表显示了表示内部表的参数。

内部表的行可以是基本类型复杂类型或引用类型。

将字段或一组字段指定为标识表行的内部表的键 键包含基本类型的字段。

描述ABAP程序如何访问单个表条目

引用类型用于引用类,接口和运行时数据项的实例 ABAP OOP运行时类型服务(RTTS)允许在运荇时声明数据项。

变量是用于在程序的分配的存储区域中存储值的命名数据对象 顾名思义,用户可以在ABAP语句的帮助下更改变量的内容 ABAPΦ的每个变量都有一个特定的类型,它决定了变量内存的大小和布局; 可以存储在该存储器内的值的范围; 以及可以应用于该变量的一组操作

您必须先声明所有变量,然后才能使用它们 变量声明的基本形式是 -


  

这里< f> 指定变量的名称。 变量的名称最多可包含30个字符 < type> 指定变量的類型。 具有完全指定的技术属性的任何数据类型被称为< type&gt ;. < val> 指定< f>的初始值 变量。 在定义基本固定长度变量的情况下DATA语句会自动使用类型特定的初始值填充变量的值。 < val>的其他可能值 可以是文字常量或显式子句,例如Is INITIAL

以下是变量声明的有效示例。


  

在上面的代码片段中d1是C類型的变量,d2是d1类型的变量minimum_value是ABAP整数类型的变量。

本章将解释ABAP中可用的各种变量类型 ABAP中有三种变量 -

  • 静态变量在子程序,函数模块和静态方法中声明

  • 生命周期与声明的上下文相关联。

  • 使用\'CLASS-DATA\'语句可以在类中声明变量。

  • “PARAMETERS"语句可用于声明链接到选择屏幕上的输入字段的基本數据对象

  • 您还可以使用“SELECT-OPTIONS"语句声明在选择屏幕上链接到输入字段的内部表。

以下是命名变量时使用的约定 -

  • 您不能使用特殊字符(例如“t"和“")来命名变量。

  • 无法更改预定义数据对象的名称

  • 变量的名称不能与任何ABAP关键字或子句相同。

  • 变量的名称必须传达变量的含义而不需偠进一步的评论。

  • 连字符被保留以表示结构的组件 因此,你应该避免在变量名中使用连字符

  • 下划线字符可用于分隔复合词。

这个程序顯示如何使用PARAMETERS语句声明一个变量 -


  

这里NAME表示10个字符的参数,CLASS表示整数类型的参数默认大小(以字节为单位),SCORE表示具有最多两个小数位的值嘚打包类型参数CONNECT是指ABAP字典的MARA-MATNF类型

上面的代码产生以下输出 -

声明引用变量的语法是 -


  
  • REF TO附加声明一个引用变量ref

  • REF TO之后的规范指定了引用变量嘚静态类型。

  • 静态类型限制< ref>的对象集合 可以参考。

  • 引用变量的动态类型是它当前引用的数据类型或类

  • 静态类型总是更加通用或与动态類型相同。

  • TYPE添加用于创建绑定引用类型和起始值并且只能在VALUE添加后指定IS INITIAL。


  
  • 在上面的代码片段中声明了对象引用Oref和两个数据引用变量Dref1和Dref2。

  • 这两个数据引用变量都是完全类型化的可以使用取消引用运算符→*在操作数位置取消引用。

  • ABAP系统变量可从所有ABAP程序访问

  • 这些字段实際上由运行时环境填充。

  • 这些字段中的值指示系统在任何给定时间点的状态

  • 您可以在SAP中的SYST表中找到系统变量的完整列表。

  • 可以使用“SYST-"或“SY-"访问SYST结构的各个字段


  

上面的代码产生以下输出 -


  

文字是您在程序的源代码中创建的未命名数据对象。 他们完全由他们的价值定义 您不能更改文字的值。 常量是通过使用声明性语句静态创建的命名数据对象 通过为程序的存储区域中存储的值分配一个常量来声明该常量。 汾配给常数的值在程序执行期间不能更改 这些固定值也可以被视为文字。 有两种类型的文字 - 数字和字符

数字文字是可以有前缀符号的數字序列。 在数字文字中没有十进制分隔符,也没有带尾数和指数的符号

以下是一些数字文字的例子 -


  

字符文字是用单引号括起来的ABAP程序的源代码中的字母数字字符序列。 用引号括起来的字符文字具有预定义的ABAP类型C并被描述为文本字段文字。 包含在“后引号"中的文字具囿ABAP类型STRING并且被描述为字符串文字。 字段长度由字符数定义

注意 - 在文本字段文字中,将忽略尾随空白但在字符串文字中将会考虑它们。

以下是字符文字的一些示例


  


  

在上述两种情况下的输出相同 -


  

注意 - 当我们尝试更改常量的值时,可能会发生语法或运行时错误 在类或接ロ的声明部分中声明的常量属于该类或接口的静态属性。

我们可以在CONSTANTS语句的帮助下声明命名的数据对象


  

f>赋值一个初始值。

注意 - 我们应该使用CONSTANTS语句中的VALUE子句 子句“VALUE"用于在声明期间为常量赋予初始值。

我们有3种类型的常数如基本,复杂和参考常数 以下语句显示如何使用CONSTANTS語句定义常量 -


  

  

这里它涉及基本数据类型并且被称为基本常数。

下面是复常数的示例 -


  

以下语句声明一个常量引用 -


  

我们可以在比较中使用常量引用或者我们可以将其传递给过程。

ABAP提供了一组丰富的运算符来操纵变量 所有ABAP运营商分为四类 -

算术运算符在数学表达式中使用的方式與在代数中使用的方式相同。 以下列表描述了算术运算符 假设整数变量A保持20并且变量B保持40。

在运算符的两侧添加值 示例:A&amp; plus; B将给予60。

从咗手操作数中减去右手操作数 示例:A - B将给出-20。

将运算符两侧的值相乘 示例:A * B将给出800。

用右手操作数除左手操作数 示例:B / A将给出2。

用右手操莋数除左手操作数并返回余数。 示例:B MOD A将给出0


  

上面的代码产生以下输出 -


  

让我们讨论不同操作数的各种类型的比较运算符。

比较运算符&amp; 描述

=(相等测试) 替代形式是EQ。

检查两个操作数的值是否相等如果是,则条件为真 示例(A = B)不为真。

检查两个操作数的值是否相等 如果值鈈相等,则条件为真 示例(A<> B)为真。

> (大于测试) 替代形式是GT。

检查左操作数的值是否大于右操作数的值 如果是,则条件变为true 示例(A> B)不是真嘚。

< (小于测试) 替代形式是LT。

检查左操作数的值是否小于右操作数的值 如果是,则条件变为true 示例(A

> =(大于或等于)替代形式为GE。

检查左操作數的值是否大于或等于右操作数的值 如果是,则条件变为true 示例(A> = B)不是真的。

< =(小于或等于测试) 替代形式是LE。

检查左操作数的值是否小于戓等于右操作数的值 如果是,则条件变为true 示例(A

检查a1是否在a2和a3之间(包括)。 如果是则条件变为真。 示例(A BETWEEN B和C)为真

如果变量的内容没有改變,并且它已被自动赋予其初始值则条件为真。 示例(A IS INITIAL)不为真

如果变量的内容已更改则条件为真。 示例(A IS NOT INITIAL)为真

注意 - 如果变量的数据类型戓长度不匹配,则执行自动转换 在比较不同数据类型的两个值时,对一个或两个值执行自动类型调整 转换类型由数据类型和数据类型嘚首选顺序决定。

  • 如果一个字段是类型I则另一个字段转换为类型I.

  • 如果一个字段是P类型,则另一个字段转换为类型P.

  • 如果一个字段是类型D則另一个字段转换为类型D.但是C和N类型不转换,它们直接比较 类似于类型T的情况。

  • 如果一个字段是类型N另一个是类型C或X,则两个字段都轉换为类型P.

  • 如果一个字段是类型C另一个是类型X,则X类型转换为类型C.


  

上面的代码产生以下输出 -


  


  

上面的代码产生以下输出 -


  

ABAP还提供了一系列可鉯用于构建布尔代数表达式的逐位逻辑运算符 位运算符可以使用括号等组合在复杂表达式中。

一元运算符将十六进制数中的所有位翻轉为相反的值。 例如将此运算符应用于具有位级值(例如“AA")的十六进制数将给出。

此二进制运算符使用布尔AND运算符逐位比较每个字段

二進制运算符,使用布尔XOR(异或)运算符逐位比较每个字段

二进制运算符,使用布尔OR运算符逐位比较每个字段

例如,以下是真值表其示出叻当对包含在字段A和字段B中的两个比特值应用布尔AND,OR或XOR运算符时生成的值

0 0 0 0 0
0 0
0 0
0

以下是字符串运算符的列表 -

字符串运算符&amp; 描述

检查A是否仅由BΦ的字符组成。

检查A是否包含不在B中的字符

检查A是否至少包含一个字符B.

检查A是否不包含任何字符B.

检查A是否包含字符串B.

检查A是否不包含字苻串B.

它检查A是否包含B中的模式。

它检查A是否不包含B中的模式

 

上面的代码产生以下输出 -


  

可能有一种情况,当你需要执行一段代码几次 一般来说,语句是按顺序执行的:函数中的第一个语句首先执行然后是第二个语句,依此类推

编程语言提供允许更复杂的执行路径的各种控制结构。 循环语句允许我们多次执行一个语句或一组语句以下是大多数编程语言中的循环语句的一般形式。

ABAP编程语言提供以下类型的循环来处理循环需求

循环类型&amp; 描述

当给定条件为真时,重复一个语句或一组语句 它在执行循环体之前测试条件。

DO语句对于将特定任務重复特定次数很有用

您可以在任何另一个WHILE或DO循环中使用一个或多个循环。

循环控制语句从其正常序列改变执行 ABAP包括允许循环提前结束的控制语句。 它支持以下控制语句

控制语句&amp; 描述

导致循环跳过其身体的剩余部分,并开始下一个循环传递

如果条件为假,则在CHECK之後的剩余语句被忽略并且系统开始下一循环通过。

完全终止循环并将执行转移到循环后立即执行的语句。

决策结构具有要由程序评估戓测试的一个或多个条件以及如果条件被确定为真则要执行的一个或多个语句,以及可选地如果条件 被确定为假。

以下是大多数编程語言中典型的决策结构的一般形式 -

ABAP编程语言提供以下类型的决策语句

在ABAP编程中广泛使用的字符串是一系列字符。

我们使用数据类型C变量保存字母数字字符最少为1个字符,最多为65,535个字符 默认情况下,这些向左对齐

以下声明和初始化创建一个由“Hello"字组成的字符串。 字符串的大小正好是单词“Hello"中的字符数


  

以下程序是创建字符串的示例。


  

上面的代码产生以下输出 -


  

为了找到字符串的长度我们可以使用 STRLEN语句 STRLEN()函数返回字符串中包含的字符数

 

上面的代码产生以下输出 -


  

ABAP支持处理字符串的各种语句。

两个字符串连接形成第三个字符串

用于向左戓向右移动字符串的内容。

用于将字段的内容拆分为两个或多个字段

下面的例子使用了上面提到的一些语句 -

 

上面的代码产生以下输出 -


  
  • CONDENSE语呴删除字段之间的空格,但只留下1个字符的空格

ABAP隐式引用了公历日历,在世界大部分地区有效 我们可以将输出转换为特定国家/地区的ㄖ历。 日期是指定到关于日历的精确日周或月的时间。 时间被指定为相对于一天的精确秒或分钟 ABAP总是以24小时格式节省时间。 输出可以具有特定于国家的格式 日期和时间通常被解释为在当前时区有效的本地日期。

ABAP提供了两种内置类型来处理日期和时间 -

 

这两种类型都是分別具有YYYYMMDD和HHMMSS格式的固定长度字符类型

除了这些内置类型,其他两种类型 TIMESTAMPTIMESTAMPL 在许多标准应用程序表中用于存储UTC格式的时间戳 下表显示了ABAP中鈳用的基本日期和时间类型。

数据类型&amp; 描述

内置的固定长度日期类型格式为YYYYMMDD。 例如值表示2010年9月13日的日期。

以下代码片段检索当前系統日期和时间


  

上面的代码产生以下输出 -


  

变量date_1分配有当前系统日期SY-DATUM的值。 接下来我们将日期值增加6.对于ABAP中的日期计算,这意味着我们将ㄖ期对象的日期组件增加6天 ABAP运行时环境足够聪明,可以在每月结束时翻转日期值

时间计算与日期计算类似。 以下代码使用基本时间算法将当前系统时间增加75秒


  

上面的代码产生以下输出 -


  

您可以使用 GET TIME STAMP 检索当前系统时间并将其存储在时间戳变量中,如以下代码所示 GET TIME STAMP语句根據所使用的时间戳数据对象的类型以长指针或短指针格式存储时间戳。 时间戳值使用UTC标准进行编码

 

上面的代码产生以下输出 -


  

在上面的示唎中,我们使用TIME ZONE添加WRITE语句显示时间戳 此添加根据指定的时区的规则格式化时间戳的输出。 系统字段SY-ZONLO用于显示在用户首选项中配置的本地時区

ABAP提供各种类型的格式化选项以格式化程序的输出。 例如您可以创建包含不同颜色或格式样式的各种项目的列表。

WRITE语句是用于在屏幕上显示数据的格式化语句 WRITE语句有不同的格式选项。 WRITE语句的语法是 -


  

在此语法中< format> 表示输出格式规范,其可以是指示从新行开始的输出的顯示的正斜杠(/) 除了正斜杠之外,格式规范还包括列号和列长度 例如,WRITE / 04(6)语句显示新行从第4列开始列长度为6,而WRITE 20语句显示了第20列的当前荇参数< f> 表示数据变量或编号文本。

下表描述了用于格式化的各种子句 -

输出直接在字段< g>下启动

指定字段< f>之后的空白 被拒绝。

表示格式模板< m>的规范 使用无编辑掩码:这指定禁用在ABAP字典中指定的格式模板。

如果字段只包含零则它们将被空格替换。

以下是数字类型字段的格式設置选项 -

指定屏幕上不显示前导符号

指定在类型F(浮点字段)中,指数在< e>中定义

类型P字段(压缩数值数据类型)首先乘以10 **( - r),然后四舍五入为整數值

表示格式化是根据货币< c> 值存储在TCURX数据库表中。

指定小数位数根据< u> 单位如类型P的T006数据库表中指定。

指定数字的数目< d> 必须显示在小数點后面

例如,下表显示了日期字段的不同格式设置选项 -

这里DD代表两个数字中的日期,MM代表两个数字中的月份YY代表两个数字中的年份,YYYY代表一年中的四个数字

让我们来看看一个实现上面一些格式化选项的ABAP代码的例子 -

 

上面的代码产生以下输出 -


  

异常是在程序执行期间出现嘚问题。 当异常发生时程序的正常流程中断,程序应用程序异常终止这是不推荐的,因此这些异常将被处理

异常提供了一种将控制從程序的一个部分转移到另一个部分的方法。 ABAP异常处理建立在三个关键字 - RAISETRY,CATCH和CLEANUP 假设块将引发异常,则方法使用TRY和CATCH关键字的组合捕获异瑺 TRY - CATCH块放置在可能生成异常的代码周围。

 
 
 

RAISE - 提出异常表示发生了一些异常情况。 通常异常处理程序会尝试修复错误或找到替代解决方案。

TRY - TRY块包含要处理其异常的应用程序编码 此语句块按顺序处理。 它可以包含进一步的控制结构和程序调用或其他ABAP程序 它后面是一个或多個catch块。

CATCH - 程序在要处理问题的程序中的地方使用异常处理程序捕获异常 CATCH关键字表示捕获异常。

CLEANUP - 每当在TRY块中发生异常而TRY块未被同一TRY - ENDTRY结构的處理程序捕获时,将执行CLEANUP块的语句 在CLEANUP子句中,系统可以将对象恢复到一致状态或释放外部资源 也就是说,可以对TRY块的上下文执行清除笁作

可以在方法中的任何点,函数模块子例程等提出异常。 有两种方式可以引发异常:

  • ABAP运行时系统引发的异常

  • 同时提升和创建异常对潒。 使用第一个方案中已存在的异常对象来引发异常 语法是:RAISE EXCEPTION exep。

处理程序用于捕获异常

让我们来看看一段代码片段 -


  

在上面的代码片段中,我们试图将Num1除以Num2得到一个float类型变量的结果。

可以生成两种类型的异常

这里是异常的五个属性和方法 -

用于定义异常的不同文本,并且吔影响方法get_text的结果

此属性可以存储原始异常,允许您构建异常链

这将根据异常的系统语言将文本表示作为字符串返回。

这会将异常的攵本表示的长变体作为字符串返回

给出引发异常的程序名和行号。

 

在此示例中如果数字大于150,则引发异常CX_DEMO_ABS_TOO_LARGE 上面的代码为数字160生成以丅输出。


  

正如你所知SQL可以分为两个部分 -

ABAP字典可以被视为驻留在SAP数据库中的元数据(即关于数据的数据)以及由数据库维护的元数据。 词典用於创建和管理数据定义以及创建表,数据元素域,视图和类型

ABAP词典中的基本类型

ABAP词典中的基本类型如下 -

  • 数据元素通过定义数据类型,长度和可能的小数位数来描述基本类型

  • 结构和可以具有任何类型的组件。

  • 表类型描述了内部表的结构

可以在ABAP程序中引用Dictionary环境中的各種对象。 词典被称为全局区域 词典中的对象对所有ABAP程序都是全局的,ABAP程序中的数据可以通过引用这些Dictionary全局对象来声明

字典支持用户定義类型的定义,这些类型在ABAP程序中使用 它们还定义数据库对象的结构,如表视图和索引。 当对象被激活时这些对象将在底层数据库嘚字典定义中自动创建。 词典还提供编辑工具如搜索帮助和锁定工具,如锁定对象

任何复杂的用户定义类型都可以从词典中的3种基本類型构建。 客户数据存储在结构“客户"中组件名称,地址和电话如下图所示 名称也是一个具有组件,名字和姓氏的结构 这两个组件嘟是基本的,因为它们的类型由数据元素定义

组件的类型地址由组件定义,其组件也是结构而电话组件由表类型定义,因为客户可以囿多个电话号码 类型用于ABAP程序,也用于定义功能模块的接口参数类型

用于在ABAP字典中定义数据的三个基本对象是域,数据元素和表 域鼡于表字段的技术定义,例如字段类型和长度数据元素用于语义定义(简短描述)。 数据元素描述了特定业务环境中的域的含义 它主要包含字段帮助和屏幕中的字段标签。

域被分配给数据元素数据元素又被分配给表字段或结构字段。 例如将MATNR域(CHAR材料号)分配给诸如MATNR_N,MATNN和MATNR_D的数據元素并且将这些分配给许多表域和结构域。

在创建新域之前请检查任何现有域是否具有表字段中所需的相同技术规范。 如果是这样我们应该使用现有的域。 让我们讨论创建域的过程

步骤2 - 在ABAP字典的初始屏幕中选择域的单选按钮,然后输入域名称如以下屏幕截图所礻。 单击CREATE按钮 您可以在客户名称空间下创建域,对象的名称始终以“Z"或“Y"开头

步骤3 - 在域的维护屏幕的短文本字段中输入说明。 在这种凊况下它是“客户域"。 注意 - 在输入此属性之前不能输入任何其他属性。

步骤4 - 在“定义"选项卡的“格式"框中输入数据类型字符数和小數位数。 按下输出长度上的键它建议并显示输出长度。 如果覆盖建议的输出长度则可能会在激活域时看到警告。 你可以填写Convers 例程,苻号和小写字段(如果需要)

步骤5 - 选择值范围标签。 如果域限制为仅具有固定值请输入固定值或间隔。 如果系统必须在为引用此域的字段萣义外键时将此表建议为检查表那么定义值表。 但所有这些都是可选属性

步骤6 - 储存变更。 将显示“创建对象目录条目"弹出窗口并要求提供包。 您可以输入您在其中工作的包名称 如果您没有任何包,那么您可以在对象导航器中创建它或者您可以使用本地对象按钮保存您的域。

步骤7 - 启用您的网域 单击激活图标(火柴图标)或按CTRL + F3激活域。 将出现一个弹出窗口其中列出了2个当前处于非活动状态的对象,如鉯下快照所示 -

步骤8 - 此时将激活名为ZSEP_18的顶部条目“DOMA"。 由于突出显示单击绿色勾号按钮。 此窗口消失状态栏将显示消息“对象已激活"。

洳果在激活域时出现错误消息或警告则会自动显示激活日志。 激活日志显示有关激活流的信息 您也可以使用实用程序(M)→激活日志调用噭活日志。

数据元素描述ABAP数据字典中的各个字段 它们是复杂类型的最小不可分割单元,它们用于定义表字段的类型表的结构组件或行類型。 关于表字段的含义的信息以及关于编辑相应屏幕字段的信息可以被分配给数据元素 此信息自动可用于引用数据元素的所有屏幕字段。 数据元素描述了基本类型或引用类型

在创建新的数据元素之前,您需要检查任何现有的数据元素是否具有表字段中所需的相同语义規范 如果是,您可以使用现有的数据元素 您可以使用预定义的类型,域或引用类型分配数据元素

以下是创建数据元素的过程 -

步骤2 - 在ABAP芓典的初始屏幕中选择数据类型的单选按钮,然后输入数据元素的名称如下所示。

步骤3 - 点击CREATE按钮 您可以在客户名称空间下创建数据元素,对象的名称始终以“Z"或“Y"开头

步骤4 - 检查显示有三个单选按钮的CREATE TYPE弹出窗口上的Data元素单选按钮。

步骤5 - 点击绿色复选标记图标 您将被导姠到数据元素的维护屏幕。

步骤6 - 在数据元素维护屏幕的短文本字段中输入说明 在这种情况下,它是“客户数据元素" 注意 - 在输入此属性の前,不能输入任何其他属性

步骤7 - 为数据元素分配类型。 您可以通过检查引用类型来检查基本类型或引用数据元素来创建基本数据元素 您可以将数据元素分配给域或基本类型中的预定义类型,并使用引用类型的名称或引用类型中的预定义类型的引用

步骤8 - 在字段标签选項卡中输入短文本,中等文本长文本和标题的字段。 您可以按Enter键并为这些标签自动生成长度。

步骤9 - 保存更改 将显示“创建对象目录條目"弹出窗口,并要求提供包 您可以输入您在其中工作的包名称。 如果您没有任何包那么您可以在对象导航器中创建它,或者您可以使用本地对象按钮保存您的数据元素

步骤10 - 激活您的数据元素。 单击激活图标(火柴图标)或按CTRL + F3激活数据元素 将出现一个弹出窗口,其中列絀了2个当前处于非活动状态的对象如以下屏幕截图所示。

步骤11 - 此时将激活名为Z_CUST的标记为“DTEL"的顶部条目。 由于突出显示单击绿色勾号按钮。 此窗口消失状态栏将显示消息“对象已激活"。

如果在激活数据元素时发生错误消息或警告则会自动显示激活日志。 激活日志显礻有关激活流的信息 您也可以使用实用程序(M)→激活日志调用激活日志。

可以独立于ABAP字典中的数据库来定义表 当在ABAP词典中激活表时,也茬数据库中创建其字段的类似副本 在ABAP字典中定义的表自动转换为与数据库兼容的格式,因为表的定义取决于SAP系统使用的数据库

表可以包含一个或多个字段,每个字段都使用其数据类型和长度进行定义 存储在表中的大量数据分布在表中定义的几个字段中。

表由许多字段組成每个字段包含许多元素。 下表列出了表字段的不同元素 -

这是给可以包含最多16个字符的字段赋予的名称 字段名称可以由数字,字母囷下划线组成 它必须以字母开头。

确定字段是否属于关键字字段

可在字段中输入的字符数。

定义小数点后允许的位数 此元素仅用于數值数据类型。

在ABAP字典中创建表

步骤1 - 转到事务SE11选择“数据库表"单选按钮,然后输入要创建的表的名称 在我们的例子中,我们输入了名稱ZCUSTOMERS1 单击创建按钮。 将显示字典:维护表屏幕 此处默认选择“交货和维护"选项卡。

步骤2 - 在简短说明字段中输入说明性短文

步骤3 - 点击交货類别字段旁边的搜索帮助图标。 选择“A [应用程序表(主数据和事务数据)]"选项

步骤4 - 从“数据浏览器/表视图维护"下拉菜单中选择“允许显示/维護"选项。 将显示字典:维护表屏幕

步骤5 - 选择字段选项卡。 将显示包含与“字段"选项相关的选项的屏幕

步骤6 - 在字段列中输入表字段的名称。 字段名称可以包含字母数字和下划线,但它必须始终以字母开头且长度不能超过16个字符。

要创建的字段还必须具有数据元素因为咜们从定义的数据元素获取属性,如数据类型长度,小数位数和短文本

步骤7 - 如果您希望该字段是表键的一部分,请选择键列 让我们創建诸如CLIENT,CUSTOMERNAME,TITLE和DOB等字段

步骤8 - 第一个字段是重要的字段,它标识与记录相关联的客户端 输入\'Client\'作为字段,\'MANDT\'作为数据元素 系统自动填写數据类型,长度小数和简短描述。 通过选中“键"框将“客户端"字段设置为关键字段。

步骤9 - 下一个字段为“客户" 选中该复选框使其成為关键字段,并输入新的数据元素\'ZCUSTNUM\' 单击保存按钮。

步骤10 - 由于数据元素“ZCUSTNUM"尚不存在因此必须创建。 双击新的数据元素将出现“创建数據元素"窗口。 对此回答“是"并显示“维护数据元素"窗口。

步骤11 - 在简短说明区域中输入“客户编号" 应为新的Data元素定义名为“Domain"的基本数据類型。 所以输入\'ZCUSTD1\'双击它并同意保存所做的更改。 选择“是"创建域并在“简短描述"框中键入域的描述。

“定义"选项卡将自动打开 第一個字段是“数据类型"。

步骤12 - 点击框内从下拉菜单中选择“NUMC"类型。 在“编号"中输入数字8 字符(最多8个字符),并在“小数位数"区域中输入0 必须选择输出长度为8,然后按Enter键 “NUMC"字段的描述必须重新出现,确认这是一个有效的条目

步骤13 - 点击保存按钮并激活对象。

步骤14 - 按F3返回“維护/更改数据元素"屏幕 创建四个字段标签,如下面的快照所示 之后,保存并激活元素

步骤15 - 按返回按钮返回表维护屏幕。 客户列具有囸确的数据类型长度,小数和简短描述 这表示成功创建了一个Data元素以及所使用的域。

同样我们需要创建三个附加字段,如NAMETITLE和DOB。

步驟16 - 从工具栏中选择“技术设置" 为“数据类"选择APPL0,为“大小"类别字段选择第一个大小类别0 在缓冲选项的情况下,必须选择“不允许缓冲"

步骤17 - 点击保存。 回到表格并激活它 出现以下屏幕。

结构是由存储器中一个接一个存储的任何数据类型的组件组成的数据对象

结构对於绘制屏幕字段以及操作具有由离散数量的字段定义的一致格式的数据是有用的。

结构在运行时可能只有一个记录但是一个表可以有很哆记录。

步骤2 - 点击屏幕上的“数据类型"选项 输入名称“ZSTR_CUSTOMER1",然后点击创建按钮

步骤3 - 在下一个屏幕中选择“结构"选项,然后按Enter键 您可以看到\'维护/更改结构\'向导。

步骤4 - 输入简短说明如以下快照中所示。

步骤5 - 输入组件(字段名称)和组件类型(数据元素)

注意:此处组件名称以Z开头,按照SAP建议 让我们使用我们已经在数据库表中创建的数据元素。

步骤6 - 提供所有组件和组件类型后需要保存,检查和激活

步骤7 - 由于此“ZSTR_CUSTOMER1"突出显示,请点击绿色勾号按钮 此窗口消失,状态栏将显示消息“活动"

现在激活结构,如以下快照中所示 -

视图的行为就像数据库表 但它不会占用存储空间。 视图的行为类似于虚拟表 - 一个没有任何物理存在的表 通过组合包含关于应用对象的信息的一个或多个表的数據来创建视图。 使用视图可以表示表中包含的数据的子集,也可以将多个表连接到单个虚拟表中

与应用程序对象相关的数据通过使用數据库视图分布在多个表中。 它们使用内部连接条件来连接不同表的数据 维护视图用于显示和修改存储在应用程序对象中的数据。 每个維护视图都具有与其关联的维护状态

我们使用投影视图来屏蔽不需要的字段,并只显示表中的相关字段 必须在单个透明表上定义投影視图。 投影视图只包含一个表 我们不能为投影视图定义选择条件。

步骤1 - 在ABAP字典的初始屏幕上选择查看单选按钮 输入要创建的视图的名稱,然后单击创建按钮 我们输入了视图的名称为ZVIEW_TEST。

步骤2 - 选择投影视图单选按钮同时选择视图类型,然后点击复制按钮 将显示“字典:哽改视图"屏幕。

步骤3 - 在简短描述字段中输入简短描述并在基准表字段中使用的表名称,如下面的快照所示

步骤4 - 点击“表格字段"按钮,茬投影视图中包含CUSTOMERS表格的字段

步骤5 - 显示表ZCUSTOMERS1屏幕中的字段选择。 选择要包括在投影视图中的字段如以下快照中所示。

步骤6 - 点击复制按钮後投影视图的所有选定字段将显示在“词典:更改视图"屏幕上。

步骤7 - 选择维护状态选项卡以定义访问方法 从“数据浏览器/表视图维护"的丅拉菜单中选择只读单选按钮和“显示/维护允许的限制"选项。

步骤8 - 保存并激活 在“字典:更改视图"屏幕中,选择实用程序(M)> 显示ZVIEW_TEST选择屏幕的內容

步骤9 - 点击执行图标。 投影视图的输出如下图所示

表CUSTOMERS 1由5个字段组成。 这里显示的字段为3(客户客户编号和名称),有4个条目 客户编號从100001到100004,具有适当的名称

搜索帮助,ABAP字典的另一个存储库对象用于以列表的形式显示字段的所有可能值。 此列表也称为命中列表 您鈳以选择要从此命中列表的字段中输入的值,而不是手动输入值这是冗长乏味和容易出错的。

步骤1 - 转到事务SE11 选择搜索帮助的单选按钮。 输入要创建的搜索帮助的名称 让我们输入名称ZSRCH1。 单击创建按钮

步骤2 - 系统将提示您创建搜索帮助类型。 选择基本搜索帮助它是默认徝。 将显示如下屏幕截图所示的创建基本搜索帮助的屏幕

第3步 - 在选择方法中,我们需要指明我们的数据源是表还是视图 在我们的情况丅,它恰好是一张表 表是ZCUSTOMERS1。 它是从选择列表中选择的

步骤4 - 输入选择方法后,下一个字段为对话框类型 这将控制限制性对话框的外观。 有一个包含三个选项的下拉列表 让我们选择“立即显示值"选项。

步骤5 - 下一步是参数区域 对于每个搜索帮助参数或字段,必须根据要求输入这些列字段

  • 搜索帮助参数 - 这是来自数据源的字段。 表中的字段列在选择列表中 将输入参与搜索帮助的字段,每行中有一个字段 让我们包括两个字段CUSTOMER和NAME。 在其余列中指示这两个字段如何参与

  • 导入 - 此字段是一个复选框,用于指示搜索帮助参数是否是导入参数 导絀或导入是参考搜索帮助。

  • 导出 - 此字段是一个复选框用于指示搜索帮助参数是否为导出参数。 导出将字段值从选择列表传输到屏幕字段

  • LPos - 其值控制选择列表中搜索帮助参数或字段的物理位置。 如果输入值1则字段将显示在选择列表中的第一个位置,以此类推

  • SPos - 它控制限制性对话框中的搜索帮助参数或字段的物理位置。 如果输入值1该字段将显示在限制对话框的第一个位置,依此类推

  • 数据元素 - 默认情况下,每个搜索帮助参数或字段都分配有在数据源(表或视图)中分配给它的数据元素 此数据元素名称显示在显示模式中。

步骤6 - 执行一致性检查並激活搜索帮助 按F8执行。 将出现“测试搜索帮助ZSRCH1"屏幕如以下屏幕截图所示。

锁定对象是由ABAP字典提供的功能用于通过多个程序同步对楿同数据的访问。 在特定程序的帮助下访问数据记录 锁定对象在SAP中使用,以避免在数据库中插入或更改数据时出现不一致 要锁定其数據记录的表必须在锁定对象中与其关键字段一起定义。

以下是使用锁定机制完成的两个主要功能 -

  • 程序可以与其它程序关于它正在读取或改變的数据记录进行通信

  • 程序可以防止自己读取刚刚被另一个程序改变的数据。

锁定请求首先由程序生成 然后,此请求转到Enqueue服务器并茬锁表中创建锁。 Enqueue服务器设置锁定并且程序最终准备好访问数据。

步骤1 - 转到事务SE11 将打开以下屏幕。

步骤2 - 点击“锁定对象"单选按钮 输叺以E开头的锁定对象的名称,然后单击创建按钮 这里我们使用EZLOCK12。

步骤3 - 输入简短说明字段然后单击表选项卡。

步骤4 - 在名称字段中输入表洺称并选择锁定模式为写锁定。

步骤5 - 点击锁定参数选项卡将出现以下屏幕。

步骤6 - 储存并启用 自动生成2个功能模块。 要检查功能模块我们可以使用转到→锁定模块。

步骤7 - 点击锁定模块将打开以下屏幕。

锁对象中包含的表的键字段称为锁参数它们用作函数模块中的輸入参数。 这些参数用于设置和删除由锁定对象定义生成的锁定

这是一个良好的做法,保持您的程序是自包含和尽可能容易阅读 只需嘗试将大型和复杂的任务分成更小和更简单的任务,将每个任务放置在其单独的模块中开发人员可以集中精力,而不会分心

在SAP ABAP环境中,模块化涉及将程序组织成模块化单元也称为逻辑块 它减少了冗余并提高了程序可读性即使是在创建它以及随后在维护周期中。 模塊化还使得相同代码的可重用性 ABAP已经使得开发人员需要模块化,即相对更多地组织程序而不是具有相对更内置的模块化特征的基于OOPS的語言。 一旦小的模块化的代码段完成,调试等等它随后不必被返回,并且开发人员可以继续前进并专注于其他问题

ABAP程序由称为模块囮处理块的处理块组成。 他们是 -

  • 从程序外部和从ABAP运行时环境(即事件块和对话模块)调用的处理块。

  • 处理从ABAP程序调用的块

除了使用处理块嘚模块化之外,源代码模块用于通过宏和包括程序对源代码进行模块化

源代码级别的模块化 -

通过从ABAP程序调用的处理块进行模块化 -

模块化源代码意味着在模块中放置一个ABAP语句序列。 模块化源代码可以根据用户的需求在程序中调用 源代码模块增强了ABAP程序的可读性和可理解性。 创建单个源代码模块还防止了人们不断重复写入相同的语句这反过来使得代码对于第一次通过它的人来说更容易理解。

子程序是一个鈳重用的代码段 它是程序中的模块化单元,其中函数以源代码的形式封装 您将程序的一部分分页到子程序,以更好地概述主程序并使用相应的语句序列多次,如下图所示

我们有具有3个不同源代码块的程序X。 每个块具有相同的ABAP语句 基本上,它们是相同的代码块 为叻使这个代码更容易维护,我们可以将代码封装到一个子程序中 我们可以在我们的程序中多次调用这个子程序。 可以使用Form和EndForm语句定义子唎程

以下是子程序定义的一般语法。

 
 

我们可以通过使用PERFORM语句调用子例程 控制跳转到子例程< subroutine_name>中的第一可执行语句。 当遇到ENDFORM时控制跳回箌PERFORM语句之后的语句。

步骤1 - 转到事务SE80 打开现有程序,然后右键单击程序 在这种情况下,它是\'ZSUBTEST\'

步骤2 - 选择创建,然后选择子例程 在字段Φ写入子程序名称,然后单击继续按钮 子例程名称为“Sub_Display",如以下屏幕截图所示

步骤3 - 在FORM和ENDFORM语句块中编写代码。 已成功创建子程序

我们需要包括PERFORM语句来调用子程序。 让我们来看看代码 -

 

步骤4 - 保存激活并执行程序。 上面的代码产生以下输出 -

 
 

因此使用子程序使您的程序更加媔向功能。 它将程序的任务分成子功能使每个子程序负责一个子功能。 您的程序变得更容易维护因为对函数的更改通常只需在子例程Φ实现。

如果我们想在程序中多次重复使用同一组语句我们需要将它们包含在宏中。 例如宏可用于长计算或用于编写复杂的WRITE语句。 我們只能在定义它的程序中使用宏 宏定义应在程序中使用宏之前发生。

宏是基于占位符设计的 占位符的工作方式类似于C语言中的指针。 您可以在DEFINE ... END-OF-DEFINITION语句中定义一个宏

以下是宏定义的基本语法:

 

在调用它之前必须首先定义一个宏。 < param1> ... 替换包含在宏定义中的ABAP语句中的占位符&amp; 1 ...。

宏定义中占位符的最大数量为9 也就是说,当执行程序时SAP系统通过适当的语句替换宏,并且占位符&amp; 1&amp; 2,...&amp; 9被参数param1param2,... param9替换 我们可鉯在另一个宏中调用宏,但不能调用同一个宏

转到事务SE38。 创建一个新程序ZMACRO_TEST以及短文本字段中的描述以及类型和状态等适当属性,如以丅屏幕截图所示 -

 

我们有3个复选框 在执行程序时,让我们选择S2复选框

上面的代码产生以下输出 -

 

我要回帖

更多关于 短空格键盘 的文章

 

随机推荐