• ABAP语法基础2


    SAP ABAP格式化数据

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

    WRITE   .
    
    • 1

    表示输出格式规范,其可以是指示从新行开始的输出的显示的正斜杠(/)。除了正斜杠之外,格式规范还包括列号和列长度。例如,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 '__:__:__'.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    上述代码产生以下输出:
    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 
    
    CATCH
    Catch Block 
    ...
    ...
    ...
    CATCH
    Catch Block 
    
    CLEANUP.
    	Cleanup block 
    
    ENDTRY.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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().
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在上面的代码片段中,我们试图将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.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    在此示例中,如果数字大于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程序,也用于定义功能模块的接口参数类型。

  • 相关阅读:
    C语言学习:14、递归函数
    HyperLynx(三十一)高速串行总线仿真(三)
    Python灰帽编程——初识Python下(函数与文件)
    Java编程注意事项若干(长期更新)
    HFS局域网分享文件的神器(附下载链接)
    HMM隐马尔可夫模型
    机器学习算法 —— 1. K近邻算法
    Notion使用方法
    使用<a>标签进行文件下载出现文件名称乱码、文件名变下划线
    windows开启远程桌面
  • 原文地址:https://blog.csdn.net/weixin_43847969/article/details/125907308