探索 HANA 上的 ABAP [10]:在 AMDP 中处理 SELECT-OPTIONS

2021-11-08 00:12发布


          点击此处--->   EasySAP.com 群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)

在这篇文章中,您将学习在 AMDP 中处理 SELECT-OPTION。这篇文章还解释了如何在 AMDP 中完成客户端处理。

不能像我们在 ABAP SQL / OPEN SQL 中那样在 SQLSCRIPT 中使用选择选项或范围表。由于这个原因,我们需要特殊的代码来处理 

AMDP 中的选择选项。

在本教程中,使用范围表。选择选项可以与 so_name[ ] 而不是 range 一起使用。

上一篇文章中,创建了以单个运营商 ID 作为输入的方法。您可以轻松地将参数传递给此方法。

选择选项并没有像它那样传递。您首先需要将它们转换为 where 子句。

考虑以下运营商 ID 范围。

现在,在此范围内添加行。

将 SO/Range 表转换为 where 子句——类型为字符串。cl_shdb_seltab=>combine_seltabs为此使用类方法


可以传递多个选择选项,重复名称,红色框中突出显示的 dref 组合

注意黄色框。这就是客户端的处理方式。客户端处理需要在 AMDP 中明确完成。

新的方法定义将不使用运营商 id 字段,但将有一个类型为 string 的字段来传递 where 子句。

最后一件事是应 where 子句。这可以通过两种方式完成。

  • 在第一次获取数据时应用

  • 在获取数据的临时表后应用过滤器

image.png

image.png


这样,我们就可以在 AMDP 中处理 Select-Options。结果如下——


代码:

"AMDP with Select Option

CLASS zjp_so_amdp_class DEFINITION
  PUBLIC FINAL CREATE PUBLIC .

  PUBLIC SECTION.

    INTERFACES : if_amdp_marker_hdb.
    TYPES : tt_flights  TYPE STANDARD TABLE OF /dmo/flight.
    DATA : r_carrier TYPE RANGE OF /dmo/flight-carrier_id.
 
    CLASS-METHODS :
      call_amdp,
      get_flights_range
        IMPORTING VALUE(iv_where)   TYPE string
        EXPORTING VALUE(et_flights) TYPE tt_flights.

ENDCLASS.

CLASS zjp_so_amdp_class IMPLEMENTATION.

  METHOD call_amdp.
    "Create range | Directly use select option here
    r_carrier = VALUE #( sign = 'I' option = 'EQ'
                         ( low = 'AZ')
                         ( low = 'JP' )
                       ).

    "Prepare where from selection tabs
    DATA(lv_where) = 
      cl_shdb_seltab=>combine_seltabs(
        EXPORTING
          it_named_seltabs = VALUE #( ( name = 'CARRIER_ID'
                                        dref = REF #( r_carrier ) ) )
          iv_client_field  = 'CLIENT' ).  "Handle Client

    get_flights_range( EXPORTING iv_where = lv_where
                       IMPORTING et_flights = DATA(lt_flights) ).
  ENDMETHOD.

  METHOD get_flights_range BY DATABASE PROCEDURE
                           FOR HDB
                           LANGUAGE SQLSCRIPT
                           OPTIONS READ-ONLY
                           USING /dmo/flight.

    et_flights = APPLY_FILTER ( "/DMO/FLIGHT", :iv_where );

  ENDMETHOD.

ENDCLASS.
"Another implementation of AMDP
  METHOD get_flights_range BY DATABASE PROCEDURE
                           FOR HDB
                           LANGUAGE SQLSCRIPT
                           OPTIONS READ-ONLY
                           USING /dmo/flight.

    temp = select * from "/DMO/FLIGHT";
    et_flights = APPLY_FILTER ( :temp, :iv_where );

  ENDMETHOD.




赞赏支持