文章来自:https://blogs.sap.com/2013/05/27/abap-news-for-release-740-constructor-operator-value/
..value dtype\#() 构造一个任意类型的初始值
...value dtype\#( comp1 = a1 comp2 = a2 ....) 构造一个任意类型的结构体的初始值
...value dtype\#( ( ...) (...) ... )... 构造一个任意类型的内表的初始值
上面dtype\# 意思是可以指定一个dtype的类型或者直接用#,用#时,其类型和被赋值的对象的数据类型一样。
如果value后的dtype是个表,则必须指定key值,或者声明为empty key。http://scn.sap.com/community/abap/blog/2013/06/27/abap-news-for-release-740--internal-tables-with-empty-key。
CLASS c1 DEFINITION.
PUBLIC SECTION.
TYPES: BEGIN OF t_struct,
col1 TYPE i,
col2 TYPE i,
END OF t_struct.
CLASS-METHODS m1 IMPORTING p TYPE t_struct.
ENDCLASS.
CLASS c1 IMPLEMENTATION.
METHOD m1.
WRITE:'col1:' , p-col1,'col2:',p-col2.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
c1=>m1( VALUE #( col1 = 5 col2 = 6 ) ).
"Elementary line type:
TYPES t_itab TYPE TABLE OF i WITH EMPTY KEY.
DATA itab TYPE t_itab.
itab = VALUE #( ( ) ( 1 ) ( 2 ) ).
cl_demo_output=>DISPLAY( itab ).
"Structured line type (RANGES table):
DATA itab TYPE RANGE OF i.
itab = VALUE #( sign = 'I' option = 'BT' ( low = 1 high = 10 )
( low = 21 high = 30 )
( low = 41 high = 50 )
option = 'GE' ( low = 61 ) ).
cl_demo_output=>DISPLAY( itab ).
TYPES t_date_tab TYPE table of string with empty key.
DATA(date_tab) = VALUE t_date_tab(
( | { conv d( sy-datlo - 1 ) DATE = environment } | )
( | { sy-datlo DATE = environment } | )
( | { conv d( sy-datlo + 1 ) DATE = environment } | ) ).
cl_demo_output=>DISPLAY( date_tab ).
这里DATE = environment是用来格式化日期的,表达式里必须有日期类型d才能使用。environment对应的值是CL_ABAP_FORMAT=>D_ENVIRONMENT
另外对日期进行加减时还需conv。如果第二行不用DATE = environment,那么输出就是20180816这样的格式。关于嵌入表达式可以F1看看
TYPES:BEGIN OF itab,
col1 TYPE i,
col2 TYPE i,
col3 TYPE i,
END OF itab.
DATA:lt_itab TYPE TABLE OF itab,lt_itab1 TYPE TABLE OF itab.
*指定内表的某一行的值
lt_itab1 = VALUE #( col1 = 1
( col2 = 2 col3 = 3 )
( col2 = 4 col3 = 5 ) ).
lt_itab = VALUE #( ( col1 = 1 col2 = 2 col3 = 3 )
( col1 = 4 col2 = 5 col3 = 56 ) ) .
cl_demo_output=>DISPLAY( lt_itab1 ).
cl_demo_output=>DISPLAY( lt_itab ).
TYPES: BEGIN OF struc1,
col1 TYPE i,
col2 TYPE i,
END OF struc1.
TYPES: BEGIN OF struc2,
col1 TYPE c LENGTH 1,
col2 TYPE struc1,
col3 TYPE c LENGTH 10,
END OF struc2.
TYPES: BEGIN OF struc3,
col1 TYPE c LENGTH 1,
col2 TYPE struc1,
mod TYPE c LENGTH 10,
END OF struc3.
DATA(ls_call2) = VALUE struc2(
col1 = 'X'
col2 = VALUE #( col1 = 3
col2 = 5 )
col3 = 'XXX' ).
DATA(ls_call3) = VALUE struc3(
col1 = 'X'
col2 = VALUE #( col1 = 3
col2 = 5 )
mod = 'XXX' ).