Menambahkan baris tidak kosong ke itab dengan operator COND

Dec 11 2020

Saya memiliki tabel internal di mana saya harus memindahkan item baris berdasarkan nilai pada 3 variabel menggunakan operator nilai.

types: 
 ty_table type standard table of string with default key.

Data(Lv_var_1) = 'LINE 1'.
Data(Lv_var_2) = 'LINE 2'.
Data(Lv_var_3) = ''.

data(lt_table) = value ty_table( ( cond #( WHEN lv_var_1 is not initial THEN lv_var_1 ) )
                                 ( cond #( WHEN lv_var_2 is not initial THEN lv_var_2 ) )
                                 ( cond #( WHEN lv_var_3 is not initial THEN lv_var_3 ) ) ). 

Di sini lv_var_3 kosong. Bagi saya ketika variabel apa pun kosong, itu seharusnya tidak membuat baris di lt_table.

Bagaimana saya bisa mencapai ini?

Jawaban

3 SandraRossi Dec 11 2020 at 22:26

Jawaban langsung untuk pertanyaan Anda adalah menggunakan LINES OFuntuk menambahkan jumlah baris yang berubah-ubah dari tabel internal perantara, yang dapat berpotensi kosong (0 baris ditambahkan) atau tidak (sejumlah baris, dalam kasus Anda 1 baris):

types:
 ty_table type standard table of string with default key.

Data(Lv_var_1) = `LINE 1`.
Data(Lv_var_2) = `LINE 2`.
Data(Lv_var_3) = ``.

data(lt_table) = value ty_table(
    ( LINES OF cond ty_table( WHEN lv_var_1 is not initial THEN VALUE #( ( lv_var_1 ) ) ) )
    ( LINES OF cond ty_table( WHEN lv_var_2 is not initial THEN VALUE #( ( lv_var_2 ) ) ) )
    ( LINES OF cond ty_table( WHEN lv_var_3 is not initial THEN VALUE #( ( lv_var_3 ) ) ) ) ).

Tetapi Anda mungkin menyadari bahwa kode tersebut tidak terbaca, kode lain dimungkinkan seperti menambahkan semua baris kemudian menghapus baris awal:

DATA(lt_table) = VALUE ty_table(
  ( lv_var_1 ) ( lv_var_2 ) ( lv_var_3 ) ).
DELETE lt_table WHERE table_line IS INITIAL.

Atau prinsip yang sama tetapi kurang terbaca dengan ekspresi konstruktor:

Data(lt_table) = value ty_table(
    FOR <line> IN VALUE ty_table( ( lv_var_1 ) ( lv_var_2 ) ( lv_var_3 ) )
    WHERE ( table_line IS NOT INITIAL )
    ( <line> ) ).

Atau kemungkinan lain seperti yang pertama, tetapi tanpa mengulang nama variabel:

TYPES ty_vars TYPE STANDARD TABLE OF REF TO string WITH EMPTY KEY.
DATA(lt_table) = VALUE ty_table(
  FOR var IN VALUE ty_vars( ( REF #( lv_var_1 ) ) ( REF #( lv_var_2 ) ) ( REF #( lv_var_3 ) ) )
  ( LINES OF COND ty_table( WHEN var->* NE `` THEN VALUE #( ( var->* ) ) ) ) ).