Abap 如何访问对象的公共类型
我有一个名为ZCL_RM_SPREADSHEETML的类 它在“类型”选项卡中有一个名为TY_STYLE的类型,其可见性为“Public”,并使用直接类型条目定义 当我尝试在调用方代码中声明以下内容时:Abap 如何访问对象的公共类型,abap,Abap,我有一个名为ZCL_RM_SPREADSHEETML的类 它在“类型”选项卡中有一个名为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 calle
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". .
Type "ZCL_RM_SPREADSHEETML~TY_STYLE" is unknown
我想这是有道理的,因为ZCL_RM_SPREADSHEETML是一个类,双击TY_STYLE
也完全不起作用
然后我用tilda试了一下:
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". .
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 ).
您是否尝试了
DATA:wa_blue\u样式类型zcl\u rm\u spreadsheetml->ty\u样式。
使用->
而不是-
。(这只是一个注释,因为我目前没有可用的SAP,所以我无法测试自己)我实际上指的是内置在SE80对象中的类型,而不是内嵌对象。但是是的,=>
在这两种情况下都有效。