BTP上的ABAP开发(4)从CDS View中查询数据

本文介绍了如何在ABAPOO中创建Localclass,使用CDSView获取和显示数据,包括添加变量、构造函数的SQL重写以及验证运行结果的过程。
摘要由CSDN通过智能技术生成

一、准备

创建类,注意添加接口if_oo_adt_classrun,定义local class以及在main方法中调用。

1.local class

local class 定义两个私有属性carrier_id和connection_id,添加包含必填验证的构造函数,以及获取实例属性的方法get_output。
代码如下:

*Local type
CLASS lcl_connection DEFINITION.
  PUBLIC SECTION.
    METHODS constructor
      IMPORTING
                i_carrier_id    TYPE /dmo/carrier_id
                i_connection_id TYPE /dmo/connection_id
      RAISING   cx_abap_invalid_value.

    METHODS get_output
      RETURNING VALUE(r_output) TYPE string.

  PROTECTED SECTION.
  PRIVATE SECTION.
    DATA carrier_id TYPE /dmo/carrier_id.
    DATA connection_id TYPE /dmo/connection_id.

ENDCLASS.

CLASS lcl_connection IMPLEMENTATION.

  METHOD constructor.

    IF i_carrier_id IS INITIAL OR i_connection_id IS INITIAL.
      RAISE EXCEPTION TYPE cx_abap_invalid_value.
    ENDIF.

    me->carrier_id = i_carrier_id.
    me->connection_id = i_connection_id.

  ENDMETHOD.

  METHOD get_output.
    r_output = |Carrier: { carrier_id } Connection: { connection_id }|.
  ENDMETHOD.
ENDCLASS.

2.mian 方法

定义connection实例以及存放connection实例的内表connections,创建两个connection对象,并存入connections表中,最后循环输出。

METHOD if_oo_adt_classrun~main.
    DATA connection TYPE REF TO lcl_connection.
    DATA connections TYPE TABLE OF REF TO lcl_connection.

    TRY.
        connection = NEW #( i_carrier_id = 'LH' i_connection_id = '0400' ).
        APPEND connection TO connections.
      CATCH cx_abap_invalid_value.
        out->write( `Invalid value.` ).
    ENDTRY.

    TRY.
        connection = NEW #( i_carrier_id = 'SQ' i_connection_id = '0001' ).
        APPEND connection TO connections.
      CATCH cx_abap_invalid_value.
        out->write( `Invalid value.` ).
    ENDTRY.

    LOOP AT connections INTO connection.
      out->write( connection->get_output( ) ).
    ENDLOOP.
ENDMETHOD.

二、调用CDS View

1.添加变量

在local type中,添加三个私有变量。要显示的字段较多,同时调整下get_output方法,将返回值由字符串换成table。
在这里插入图片描述
get_output的返回值由string换成string_table,方法实现也进行调整。
在这里插入图片描述
将connection实例的各个属性加上描述append到table中,加条分隔线,结果清楚一些。
在这里插入图片描述
运行结果大概是这个样子的
在这里插入图片描述

2.查看CDS View

在ABAP Development Object中查找/dmo/i_connection并双击,在I_CONNECTION cds view中找到需要的字段。
在这里插入图片描述
注意匹配lcl_connection中声明的变量,carrier_id对应Connection.carrier_id,重命名为AirlineID。以此类推,匹配connection_idairport_from_idairport_to_id
*查到字段后别关,之后还会用这个CDS文件。
在这里插入图片描述
字段carrier_name并不在当前CDS View中,根据顶部association的定义,通过show tooltip description,可以找到carrier name。
在这里插入图片描述

3.从cds view中获取数据

使用select语句重写构造函数的逻辑,从cds view中获取数据并给实例初始化。
在这里插入图片描述
carrier_idconnection_id保持原来的初始化方式,airport_from_idairport_to_idcarrier_name通过SQL从CDS View中读取。语句中指定的字段注意对应CDS重命名后的字段名,不要用原始名称。如使用DepartureAirport查询airport_from_id,而不是直接用airport_from_id
另外,由于carrier_name是CDS中association的属性,在fields中指明的时候要有些特殊处理。在该字段前需用左斜线\指定association,然后用横线-选中association的属性,\_Airline-Name

三、运行

1.运行结果

保存激活,回到Global class,运行,结果如下。
在这里插入图片描述

2.验证结果

在eclipse中可以直接预览CDS的查询结果,对比SQL的结果,可以知道SQL的查询逻辑是否正确。
窗口切到CDS文件,点击运行按钮,run as -> ABAP Application。如图,出发地和目的地正确。
在这里插入图片描述
选中SQ,右键,查看关联的association。双击I_Carrier,如图,航空公司的名称一致。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


总结

打完收工。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值