一、准备
创建类,注意添加接口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_id
、airport_from_id
和airport_to_id
。
*
查到字段后别关,之后还会用这个CDS文件。
字段carrier_name
并不在当前CDS View中,根据顶部association
的定义,通过show tooltip description,可以找到carrier name。
3.从cds view中获取数据
使用select
语句重写构造函数的逻辑,从cds view中获取数据并给实例初始化。
carrier_id
和connection_id
保持原来的初始化方式,airport_from_id
、airport_to_id
和carrier_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,如图,航空公司的名称一致。
总结
打完收工。