我有一个类名为ZCL_RM_SPREADSHEETML。
在Types选项卡中有一个名为TY_STYLE的可见性为"Public"的类型,它是通过直接类型条目定义的。
当我尝试在调用者代码中声明以下内容时:
DATA : wa_blue_style TYPE zcl_rm_spreadsheetml-ty_style.
得到如下结果:
The type "ZCL_RM_SPREADSHEETML" has no structure and therefore no
component called "TY_STYLE". .
这是有意义的,我想作为ZCL_RM_SPREADSHEETML是一个类,也双击TY_STYLE
绝对没有。
然后我试着用tilda:
DATA : wa_blue_style TYPE zcl_rm_spreadsheetml~ty_style.
我得到了以下内容:
Type "ZCL_RM_SPREADSHEETML~TY_STYLE" is unknown
双击TY_STYLE会把我带到TY_STYLE的定义,所以我必须接近。上次我遇到类似的问题是因为我正在访问一个私有方法,但我明确地将类型标记为Public。
你知道我做错了什么吗?
编辑
我也试过按注释
DATA : wa_blue_style TYPE ref to zcl_rm_spreadsheetml->ty_style. "and
DATA : wa_blue_style TYPE zcl_rm_spreadsheetml->ty_style.
,
Field "ZCL_RM_SPREADSHEETML" is unknown. It is neither in one of the
specified tables nor defined by a "DATA" statement.
这给了我一个想法,尝试这个'类'的方式,
DATA : wa_blue_style TYPE zcl_rm_spreadsheetml=>ty_style.
这是你必须使用合适的组件选择器:
已定义的字符,可用于寻址上层单元的组件。有结构组件选择器(
-
)、类组件选择器(=>
)、接口组件选择器(~
)和对象组件选择器(->
)。
在这种情况下,您正在访问类的类型(组件),因此您必须使用=>
。
你是这个意思吧?
report zstructsob.
*&---------------------------------------------------------------------*
*& Class MYCLASS
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
class myclass definition.
public section.
types: begin of mystruct, " ------------> The public type
field1 type i,
field2 type string,
end of mystruct.
methods print_data importing data type mystruct.
private section.
data mydata type mystruct.
endclass. "MYCLASS
*&---------------------------------------------------------------------*
*& Class (Implementation) MYCLASS
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
class myclass implementation.
method print_data.
write:/ data-field1, data-field2.
endmethod.
endclass. "MYCLASS
start-of-selection.
data ztype type myclass=>mystruct. " ------------> The public type of the class
data zclass type ref to myclass.
create object zclass.
ztype-field1 = 1.
ztype-field2 = 'Field2'.
zclass->print_data( ztype ).