ABAP的新语法向SPARK的RDD靠拢啊


REPORT ytest_cds01.

PERFORM frm_innter_table.
PERFORM frm_cdsview.

PERFORM frm_fliter.
PERFORM frm_reduce.

* 测试没通过,
*cl_salv_gui_table_ida=>create_for_cds_view( iv_cds_view_name = 'ydemo_c_rstatus' )->fullscreen()->display().
* 测试没通过,
*SELECT a~bukrs,a~belnr,b~sgtxt
*  FROM bkpf AS a INNER JOIN mseg AS b
*  ON  right( a~belnr,5 ) = right( b~belnr,5 )
*  INTO TABLE @DATA(lt_doc).




*&---------------------------------------------------------------------*
*& Form FRM_FLITER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_fliter .
  DATA: lt_flights_all  TYPE STANDARD TABLE OF spfli
                        WITH NON-UNIQUE SORTED KEY carrid COMPONENTS carrid,
        lt_flight_final TYPE STANDARD TABLE OF spfli.
  TYPES: BEGIN OF ty_sorted,
           carrid TYPE spfli-carrid,
         END OF ty_sorted.
  DATA: filter_tab1 TYPE SORTED TABLE OF ty_sorted WITH UNIQUE KEY carrid.

  filter_tab1 = VALUE #(
  ( carrid = 'AH' )
  ( carrid = 'LH' )
  ).
  SELECT * FROM spfli INTO TABLE @lt_flights_all.

  DATA: filter_tab TYPE SORTED  TABLE OF spfli-carrid WITH UNIQUE KEY table_line.
*下面这个方法报错,可能版本问题
*  filter_tab = VALUE #(
*  ( 'AH' )
*  ( '' )
*  ).
  lt_flight_final = FILTER #(
  lt_flights_all IN filter_tab
  WHERE carrid = table_line ).
  cl_demo_output=>write( 'test rudce' ).

  LOOP AT  lt_flights_all ASSIGNING FIELD-SYMBOL(<fs>).
    WRITE:/ <fs>-carrid,<fs>-connid.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_REDUCE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_reduce .

  TYPES:BEGIN OF ty_data,
          carrid    TYPE ydemo_c_rstatus-carrid,
          connid    TYPE ydemo_c_rstatus-connid,
          planetype TYPE ydemo_c_status-planetype,
        END OF ty_data.
  TYPES: ty_t_data TYPE STANDARD TABLE OF ty_data.
  DATA:  lt_tab TYPE ty_t_data.
  "\_spfliptype是VIEW ydemo_c_Rstatus 中的association view 的名字,
* VIEW ydemo_c_Rstatus 并不包含planetype 这个字段,但是出可以访问
  SELECT carrid,
          connid,
         \_spfliptype-planetype AS plane_type
    FROM ydemo_c_rstatus
    WHERE ydemo_c_rstatus~carrid = 'LH'
      AND \_spfliptype-planetype = 'A319' INTO TABLE @lt_tab.
  WRITE: lines( lt_tab[] ).
*  append

  APPEND   VALUE #( carrid = 'wq' connid = '223' planetype = 'nj' ) TO lt_tab.

  DATA(lv_lines) = lines( lt_tab ).
* reduce
  DATA(lv_lines_g) = REDUCE i(
  INIT x = 0
  FOR ls_tab IN lt_tab WHERE ( carrid = 'LH' )
  NEXT x = x + 1

  ).

  cl_demo_output=>write( lv_lines ) .
  cl_demo_output=>write( lv_lines_g ).

* reduce
  DATA(result) = REDUCE string(
    INIT text = `Count up:`
    FOR n = 1 UNTIL n > 10
    NEXT text = text && | { n }| ).
  cl_demo_output=>write( result ) .

* intertable insert

  lt_tab = VALUE #(
  ( carrid = 'qq' connid = '123' planetype = 'nj' )
  ( carrid = 'q1' connid = '123' planetype = 'nj' )
  ).
  WRITE /  'test reduce '  .
  LOOP AT lt_tab ASSIGNING FIELD-SYMBOL(<fs>).
    WRITE:/ <fs>-carrid,<fs>-connid,<fs>-planetype.
  ENDLOOP.
  WRITE /  'test reduce '  .
  cl_demo_output=>write( lt_tab ) .


  TYPES outref TYPE REF TO if_demo_output.

  DATA(output) =  REDUCE outref(
    INIT out11  = cl_demo_output=>new( )
                        text1 = 'COUNT '
    FOR n = 1 UNTIL n > 11
   NEXT out11 = out11->write( text1 )

                        text1 = | 'TEST' { n } 'end' | ).

  output->display( ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CDSVIEW
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_cdsview .
  TYPES:BEGIN OF ty_data,
          carrid    TYPE ydemo_c_rstatus-carrid,
          connid    TYPE ydemo_c_rstatus-connid,
          planetype TYPE ydemo_c_status-planetype,
        END OF ty_data.
  TYPES: ty_t_data TYPE STANDARD TABLE OF ty_data.
  DATA:  lt_tab TYPE ty_t_data.
  "\_spfliptype是VIEW ydemo_c_Rstatus 中的association view 的名字,
* VIEW ydemo_c_Rstatus 并不包含planetype 这个字段,但是出可以访问
  SELECT carrid,
          connid,
         \_spfliptype-planetype AS plane_type

    FROM ydemo_c_rstatus
    WHERE ydemo_c_rstatus~carrid = 'LH'
      AND \_spfliptype-planetype = 'A319' INTO TABLE @lt_tab.
  WRITE: lines( lt_tab[] ).
  WRITE /  'test cds'  .
  LOOP AT lt_tab ASSIGNING FIELD-SYMBOL(<fs>).
    WRITE:/ <fs>-carrid,<fs>-connid,<fs>-planetype.
  ENDLOOP.
*  cl_demo_output=>write( lt_tab ) .
  WRITE /  'test cds'  .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_INNTER_TABLE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_innter_table .

  TYPES: BEGIN OF ty_bkpf,
           belnr LIKE bkpf-belnr,
         END OF ty_bkpf.
  DATA: lt_bkpf TYPE STANDARD TABLE OF ty_bkpf.
  DATA: lt_bkpf_all TYPE STANDARD TABLE OF bkpf.

  lt_bkpf = VALUE #(
  ( belnr = '0100000006' )
  ( belnr = '0100000007' )
  ( belnr = '0100000008' ) ).
*----- inner join 内表
*----- 在SQL命令中不能使用多个内部表。
  SELECT a~*
    FROM bkpf AS a
    INNER JOIN @lt_bkpf AS b
    ON  a~belnr = b~belnr
    INTO TABLE @lt_bkpf_all.

  DATA(lv_line) = lines( lt_bkpf_all ).
  WRITE:lv_line.
ENDFORM.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值