Code: Alles auswählen.
REPORT.
CLASS ltc_unit_test DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
PRIVATE SECTION.
METHODS unit_test1 FOR TESTING.
METHODS unit_test2 FOR TESTING.
METHODS unit_test3 FOR TESTING.
METHODS unit_test4 FOR TESTING.
CLASS-METHODS class_setup.
ENDCLASS.
CLASS ltc_unit_test IMPLEMENTATION.
METHOD class_setup.
FINAL(t000_double) = cl_osql_test_environment=>create( VALUE #( ( 'VEKP' ) ) ).
t000_double->insert_test_data( VALUE vekp_t( ( venum = '0000000001' exidv = '00000000000000004711' )
( venum = '0000000002' exidv = '00000000000000004711' )
( venum = '0000000003' exidv = '00000000000000004712' )
( venum = '0000000004' exidv = '00000000000000004712' ) ) ).
ENDMETHOD.
METHOD unit_test1.
" Arrange
DATA l_exidv TYPE exidv.
l_exidv = '4711'.
" Act
SELECT SINGLE FROM vekp
FIELDS exidv,
MAX( venum ) AS venum
WHERE exidv = @( |{ l_exidv ALPHA = IN }| )
GROUP BY exidv
INTO @FINAL(l_vekp).
" Assert
cl_abap_unit_assert=>assert_equals( exp = '0000000002'
act = l_vekp-venum ).
ENDMETHOD.
METHOD unit_test2.
" Arrange
DATA l_exidv TYPE exidv.
l_exidv = '4712'.
" Act
SELECT * FROM vekp
WHERE exidv = @( |{ l_exidv ALPHA = IN }| )
ORDER BY venum DESCENDING
INTO @FINAL(l_result)
UP TO 1 ROWS. ENDSELECT.
" Assert
cl_abap_unit_assert=>assert_equals( exp = '0000000004'
act = l_result-venum ).
ENDMETHOD.
METHOD unit_test3.
" Arrange
FINAL(l_hus) = VALUE rsdsselopt_t( sign = 'I'
option = 'EQ'
( low = '00000000000000004711' )
( low = '00000000000000004712' ) ).
" Act
SELECT FROM vekp
FIELDS exidv,
MAX( venum ) AS venum
WHERE exidv IN @l_hus
GROUP BY exidv
INTO TABLE @FINAL(l_result).
" Assert
cl_abap_unit_assert=>assert_equals( exp = 2
act = lines( l_result ) ).
cl_abap_unit_assert=>assert_equals( exp = '0000000002'
act = l_result[ 1 ]-venum ).
cl_abap_unit_assert=>assert_equals( exp = '0000000004'
act = l_result[ 2 ]-venum ).
ENDMETHOD.
METHOD unit_test4.
" Arrange
TYPES:
BEGIN OF ty_hus,
exidv TYPE exidv,
END OF ty_hus,
tty_hus TYPE SORTED TABLE OF ty_hus WITH NON-UNIQUE KEY exidv.
DATA l_hus TYPE tty_hus.
l_hus = VALUE #( ( exidv = '00000000000000004711' )
( exidv = '00000000000000004711' )
( exidv = '00000000000000004712' ) ).
SELECT DISTINCT exidv FROM vekp
FOR ALL ENTRIES IN @l_hus
WHERE exidv = @l_hus-exidv
INTO TABLE @FINAL(l_vekp).
DATA l_rng_exidv TYPE RANGE OF exidv.
LOOP AT l_vekp ASSIGNING FIELD-SYMBOL(<row>).
l_rng_exidv = VALUE #( BASE l_rng_exidv
( sign = 'I'
option = 'EQ'
low = <row>-exidv ) ).
ENDLOOP.
" Act
SELECT FROM vekp
FIELDS exidv,
MAX( venum ) AS venum
WHERE exidv IN @l_rng_exidv
GROUP BY exidv
INTO TABLE @FINAL(l_result).
" Assert
cl_abap_unit_assert=>assert_equals( exp = 2
act = lines( l_result ) ).
cl_abap_unit_assert=>assert_equals( exp = '0000000002'
act = l_result[ 1 ]-venum ).
cl_abap_unit_assert=>assert_equals( exp = '0000000004'
act = l_result[ 2 ]-venum ).
ENDMETHOD.
ENDCLASS.
Code: Alles auswählen.
define view entity zhandling_unit as select from vekp{
exidv,
max( venum )
} group by exidv
Code: Alles auswählen.
SELECT * FROM zhandling_unit
FOR ALL ENTRIES IN @l_hus
WHERE exidv = @l_hus-exidv
INTO TABLE @FINAL(l_result).
Code: Alles auswählen.
data l_rng_Exidv type range of exidv.
select
'I' as sign,
'EQ' as option,
exidv as low
from
@l_vekp as v
into table
@l_rng_exidv.
Code: Alles auswählen.
types:
begin of ty_hus,
exidv type exidv,
end of ty_hus,
tty_hus type sorted table of ty_hus with non-unique key exidv.
data l_hus type tty_hus.
types:
begin of t_vekp,
venum type venum,
exidv type exidv,
end of t_vekp,
tty_vekp type sorted table of t_vekp with UNIQUE key venum.
data vekp type tty_vekp.
data l_exidv type exidv.
vekp = value #( ( venum = '0000000001' exidv = '00000000000000004711' )
( venum = '0000000002' exidv = '00000000000000004711' )
( venum = '0000000003' exidv = '00000000000000004712' )
( venum = '0000000004' exidv = '00000000000000004713' ) ).
l_hus = value #( ( exidv = '00000000000000004711' )
( exidv = '00000000000000004712' )
( exidv = '00000000000000004713' ) ).
select distinct
exidv
from
vekp as vekp
for all entries in
@l_hus
where
exidv = @l_hus-exidv
into table
@final(l_vekp).
data l_rng_Exidv type range of exidv.
select
'I' as sign,
'EQ' as option,
exidv as low
from
@l_vekp as v
into table
@l_rng_exidv.
select
exidv,
max( venum ) as venum
from
vekp
where
exidv in @l_rng_exidv
group by
exidv
into table
@final(l_result).
write / lines( l_result ).
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 2):
rob_abc • whaslbeck
Code: Alles auswählen.
METHOD unit_test5.
" Arrang
TYPES:
BEGIN OF ty_hus,
exidv TYPE exidv,
END OF ty_hus,
tty_hus TYPE SORTED TABLE OF ty_hus WITH NON-UNIQUE KEY exidv.
DATA l_hus TYPE tty_hus.
l_hus = VALUE #( ( exidv = '00000000000000004711' )
( exidv = '00000000000000004711' )
( exidv = '00000000000000004712' ) ).
" Act
SELECT
FROM vekp
INNER JOIN
@l_hus AS l_hus ON l_hus~exidv = vekp~exidv
FIELDS vekp~exidv,
MAX( venum ) AS venum
GROUP BY vekp~exidv
INTO TABLE @FINAL(l_result).
" Assert
cl_abap_unit_assert=>assert_equals( exp = 2
act = lines( l_result ) ).
cl_abap_unit_assert=>assert_equals( exp = '0000000002'
act = l_result[ 1 ]-venum ).
cl_abap_unit_assert=>assert_equals( exp = '0000000004'
act = l_result[ 2 ]-venum ).
ENDMETHOD.
Ist auch eine meiner Lieblingsanwendungen dieses inzwischen ja gar nicht mehr so neuen Konstrukts. Zumal damit dann auch die nervige und manchmal vergessene Abfrage, ob die itab denn nun leer ist , entfallen kann.