ABAP语法基础2

SAP ABAP格式化数据

ABAP提供各种类型的格式化选项以格式化程序的输出。例如,可以创建包含不同颜色或格式样式的各种项目的列表。
WRITE语句时用于屏幕上显示数据的格式化语句。
WRITE语句由不同的格式选项。WRITE语句的语句时:

WRITE <format> <f> <options>.

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

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

编号 说明
1 LEFT-JUSTIFIED
指定输出为左对齐

2 CENTERED
表示输出居中

3 RIGHT-JUSIFIED
指定输出为右对齐

4 UNDER
输出直接在字段 下启动。

5 NO-GAP
指定字段之后的空白 被拒绝

6 USING EDIT MASK
表示格式模板的规范。 使用无编辑掩码:这指定禁用在ABAP字典中指定的格式模板。

7 NO-ZERO
如果字段只包含零,则它们将被空格替换。

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

编号 条款和说明
1 NO-SIGN
指定屏幕上不显示前导符号

2 EXPONENT
指定在类型F(浮点字段)中,指数中定义。

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

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

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

6 DECIMALS< d>
指定数字的数目< d> 必须显示在小数点后面。

下表显示了日期字段的不同格式设置选项:
DD/MM/YY 13/01/15
MM/DD/YY 01/13/15
DD/MM/YYYY 13/01/2015
MM/DD/YYYY 01/13/2015
DDMMYY 130115
MMDDYY 011315
YYMMDD 150113

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

REPORT ZTest123_01.

DATA:n(9) TYPE C VALUE ‘Tutorials’,
m(5)   TYPE C  VALUE   'Point'.
*定义n和m

WRITE: n, m. 
WRITE: / n, 
/ m UNDER n.
*输出n和m
*输出换行符和m UNDER n
*UNDER即m输出在n下方
*故输出:
Tutorials Point 
Tutorials  
Point 
*
WRITE: / n NO-GAP, m. 
DATA time TYPE T VALUE '112538'. 

WRITE: / time, 
/(8) time Using EDIT MASK '__:__:__'.

上述代码产生以下输出:
Tutorials Point
Tutorials
Point
TutorialsPoint
112538
11:25:38

SAP ABAP异常处理

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

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

TRY.
Try Block <Code that raise an exception>

CATCH
Catch Block <exception handler M>
...
...
...
CATCH
Catch Block <exception handler R>

CLEANUP.
	Cleanup block <to restore consistent state>

ENDTRY.

RAISE - 提出异常,表示发生了一些异常情况。通常,异常处理程序会尝试修复错误或找到替代解决方案。
TRY - TRY块包含要处理其异常的应用程序编码。此语句块按顺序处理。它可以包含进一步的控制结构和程序调用或其他ABAP程序。它后面是一个或多个catch块。
CATCH - 程序在要处理问题的程序中的地方使用异常处理程序捕获异常。CATCH关键字表示捕获异常。
CLEANUP - 每当TRY块中发生异常,而TRY块未被同一TRY-ENDTRY结构的处理程序捕获时,将执行CLEANUP块的语句。在CLEANUP子句中,系统可以将对象回复到一致状态或释放外部资源。也就是说,可以对TRY的上下文执行清楚工作。

提出异常

可以在方法中的任何点,函数模块,子例程等提出异常:
由两种方法可以引发异常:
1.ABAP运行时系统引发的异常。
例如,Y=1/0.这将导致类型CX_SY_ZERODIVIDE的运行时错误。
2.程序员提出的异常。
同时提升和创建异常对象。使用第一个方案中已存在的异常对象来引发异常。语法是:RAISE EXCEPTION exep.

捕获异常

处理程序用于捕获异常
让我们来看看一段代码片段:

DATA: result TYPE P LENGTH 8 DECIMALS 2,
EXREF TYPE REF TO CX_ROOT,
MSGTXT TYPE STRING.
PARAMETERS:Num1 TYPE I,Num2 TYPE I.
TRY.
result = Num1/Num2.
CATCH CX_SY_ZERODIVIDE INTO exref.
msgtxt =exref->GET_TEXT( ).

CATCH CX_SY_CONVERSION_NO_NUMBER INTO exref.
msgtxt = exref->GET_TEXT().

在上面的代码片段中,我们试图将Num1除以Num2,得到一个float类型变量的结果。
可以生成两种类型的异常。
数字转换异常。
除以零异常。处理程序捕获CX_SY_CONVERSION_NO_NUMBER异常以及CX_SY_ZERODIVIDE异常。 这里异常类的GET_TEXT()方法用于获取异常的描述。

异常的属性

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

编号 属性
1 Textid
用于定义异常的不同文本,并且页影响方法get_text的结果。

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

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

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

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

例子

REPORT ZExceptionsDemo. 
PARAMETERS Num_1 TYPE I.
*声明一个变量Num_1

DATA res_1 TYPE P DECIMALS 2.
DATA orf_1  TYPE REF TO CX_ROOT.
DATA txt_1  TYPE STRING.

start-of-selection
Write : / ' Square Root and Division with:', Num_1.
Write : /.

TRY.
IF ABS(Num_1) >150.
RAISE EXCEPTION TYPE CX_DEMO_ABS_TOO_LARGE.
ENDIF.

TRY.
res_1 = SQRT( Num_1).
Write :/ 'Result of square root:', res_1.
res_1 = 1 / Num_1.

Write:/'Result of division:' ,res_1.
CATCH CX_SY_ZERODIVIDE INTO orf_1.
txt_1 =orf_1->GET_TEXT().
CLEANUP.
CLEAR res_1.
ENDTRY.

CATCH CX_ROOT_INTO orf_1.
txt_1 = orf_1->GET_TEXT().
ENDTRY.
IF NOT txt_1 IS INITIAL..
Write / txt_1
ENDIF.
Write :/ 'Final Result is:' , res_1.

在此示例中,如果数字大于150,则引发CX_DEMO_ABS_TOO_LARGE。
上面的代码为数字160生成以下输出。
输出如下:
Square Root and Division with: 160
The absolute value of number is too high
Final Result is: 0.00

SAP ABAP字典

我们知道,SQL可以分为两个部分:
DML和DDL
DML部分包括查询和更新命令,如SELECT ,INSERT,UPDATE,DELETE等,ABAP程序处理SQL的DML部分。DDL部分由诸如CREATE TABLE,CREATE INDEX,DROP TABLE,ALTER TABLE 等命令组成,
ABAP字典处理SQL的DDL部分。

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

ABAP字典中的基本类型

ABAP词典中的基本类型如下:
数据元素通过定义数据类型,长度和可能的小数位数来描述基本类型。
结构和可以具有任何类型的组件。
表类型描述了内部表的结构。

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

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

字典任务

ABAP字典实现以下:
Enforces data integrity.
Manages data definitions without redundancy.
Integrates tightly with rest of the ABAP development workbench.


强制数据完整性。

管理无冗余的数据定义。

与ABAP开发工作台的其他部分紧密集成。

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值